Можно ли игнорировать нерелевантные методы при профилировании приложений ruby?

При использовании ruby-prof, распечатанного в режиме graph-html, в отчете по одному методу написано (с некоторыми перехватами)

%Total       %Self       Total       Self    Wait    Child       Calls      Name    Line
52.85%       0.00%       51.22       0.00    0.00    51.22       1  ClassName#method_name  42
                         51.22       0.00    0.00    51.22       1/3        Hash#each  4200

Очевидно, это не Hash#each Это занимает много времени, но yield блок внутри Hash# каждый.

Глядя на отчет по Hash# каждый вводит в заблуждение, потому что он сообщает обо всем коде, вызываемом всем, что использует Hash# каждый.

Можно ли попросить ruby-prof поместить информацию о полученном коде в ClassName#method_nameотчет?

С помощью min_percent или переключение на плоский профиль, кажется, не помогает.

2 ответа

Решение

Версия 0.9.0 ruby-prof позволяет исключить метод. Например, чтобы устранить Integer#timesиспользовать

result = RubyProf.stop
result.eliminate_methods!([/Integer#times/])

чтобы

def method_a
  5.times {method_b}
end

будет указывать на связь между method_a а также method_b непосредственно.

Если вы не возражаете против низких технологий, возможно, вы хотите рассмотреть это. Все, что вам нужно - это приостановить отладчик. Гарантированный, он быстро найдет все, что вы можете найти любым другим способом, и не покажет вам никакого ненужного кода.

Другие вопросы по тегам