Skip to content

Instantly share code, notes, and snippets.

@Incanus3
Last active August 29, 2015 14:03
Show Gist options
  • Save Incanus3/f46796e5f84984f6aceb to your computer and use it in GitHub Desktop.
Save Incanus3/f46796e5f84984f6aceb to your computer and use it in GitHub Desktop.
tracing method calls
level = 0
call_trace = TracePoint.new(:call) do |event|
indent = ' ' * level
Rails.logger.info("#{indent}#{level} : #{event.event} " +
"#{event.defined_class}\##{event.method_id} " +
"@ #{event.path}:#{event.lineno}")
level += 1
end
return_trace = TracePoint.new(:return) do |event|
level -= 1
indent = ' ' * level
Rails.logger.info("#{indent}#{level} : #{event.event} " +
"#{event.defined_class}\##{event.method_id} " +
"@ #{event.path}:#{event.lineno}")
end
call_trace.enable
return_trace.enable
set_trace_func proc { |event, file, line, method_id, binding, classname|
case event
when 'call'
indent = ' ' * level
Rails.logger.info("#{indent}#{level}: #{event} " +
"#{classname}\##{method_id} " +
"\n#{indent} #{file}:#{line}")
level += 1
set_trace_func nil if level > 60
when 'return'
level -= 1
indent = ' ' * level
Rails.logger.info("#{indent}#{level}: #{event} " +
"#{classname}\##{method_id} " +
"\n#{indent} #{file}:#{line}")
end
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment