找出哪个更高级别的功能正在进行大量的低级别呼叫

时间:2010-05-18 23:06:51

标签: ruby-on-rails tracing

我有一个被调用超过一千次的函数,减慢了一切。但是,它是一个低级功能,并且不知道我的哪个高级功能正在削减和进行这些调用。我怎么能找到?

1 个答案:

答案 0 :(得分:1)

如果低级函数是用Ruby编写的,请重新打开它的类并使用alias_method_chain

class TheClass
  def low_level_with_debug_output
    puts "I am being called by #{caller.first.inspect}"
    low_level_without_debug_output
  end

  alias_method_chain :low_level, :debug_output
end

alias_method_chain是一个Rails-ism。

如果低级函数不是用Ruby编写的,你可能需要在解释器本身上使用ruby-debug甚至gdb来获取堆栈跟踪。