遍历函数时自动打印每个函数名称

时间:2014-03-14 02:05:25

标签: ruby-on-rails ruby

当我通过函数以便轻松调试时,Ruby / Rails是否有自动打印函数名称?正如我发现在每个函数之前添加puts很麻烦。请指教并谢谢!

示例:

def update_original_calendar
  puts '-> update_original_calendar'
end

def update_destination_calendar
  puts '-> update_destination_calendar'
  update_original_calendar
end

示例结果:

-> update_destination_calendar
-> update_original_calendar

2 个答案:

答案 0 :(得分:0)

您可以使用Kernel#set_trace_func方法。将以下代码放在初始化逻辑中的某处。只需确保当应用程序逻辑到达您想要跟踪的方法时,该代码片段已被执行。

classes_to_trace = %w(YOUR_CLASSNAME1 YOUR_CLASSNAME2)
set_trace_func proc {|event, file, line, id, binding, classname|
  if event == 'call' and classes_to_trace.include?(classname.to_s)
    puts "event = #{event}, file = #{file}, line = #{line}, id = #{id}, classname = #{classname}"
  end
}

答案 1 :(得分:0)

如果您使用的是Ruby 2.x:

http://ruby-doc.org/core-2.0/TracePoint.html

trace = TracePoint.new(:call) do |tp|
    p [tp.lineno, tp.defined_class, tp.method_id, tp.event]
end

trace.enable

# Your code here

我还没有对它进行测试,但它应该可行