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

При использовании 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 # each.

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

Использование min_percent или переход на плоский профиль, похоже, не помогают.

Ответ 1

Версия 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 напрямую.

Ответ 2

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