In Files
- tracer.rb
Parent
Methods
Tracer
Outputs a source level execution trace of a Ruby program.
It does this by registering an event handler with Kernel#set_trace_func for processing incoming events. It also provides methods for filtering unwanted trace output (see ::add_filter, ::on, and ::off).
Example¶ ↑
Consider the following Ruby script
class A def square(a) return a*a end end a = A.new a.square(5)
Running the above script using ruby -r tracer example.rb
will
output the following trace to STDOUT (Note you can also explicitly
require 'tracer'
)
#0:<internal:lib/rubygems/custom_require>:38:Kernel:<: - #0:example.rb:3::-: class A #0:example.rb:3::C: class A #0:example.rb:4::-: def square(a) #0:example.rb:7::E: end #0:example.rb:9::-: a = A.new #0:example.rb:10::-: a.square(5) #0:example.rb:4:A:>: def square(a) #0:example.rb:5:A:-: return a*a #0:example.rb:6:A:<: end | | | | | | | | | ---------------------+ event | | | ------------------------+ class | | --------------------------+ line | ------------------------------------+ filename ---------------------------------------+ thread
Symbol table used for displaying incoming events:
- +}+
-
call a C-language routine
- +{+
-
return from a C-language routine
- +>+
-
call a Ruby method
C
-
start a class or module definition
E
-
finish a class or module definition
-
-
execute code on a new line
- +^+
-
raise an exception
- +<+
-
return from a Ruby method
Copyright¶ ↑
by Keiju ISHITSUKA(keiju@ishitsuka.com)
Constants
- EVENT_SYMBOL
Symbol table used for displaying trace information
- Single
Reference to singleton instance of Tracer
- display_c_call
- display_process_id
- display_thread_id
- stdout
- verbose
Attributes
Public Class Methods
Used to filter unwanted trace output
Example which only outputs lines of code executed within the Kernel class:
Tracer.add_filter do |event, file, line, id, binding, klass, *rest| "Kernel" == klass.to_s end
# File tracer.rb, line 264 def Tracer.add_filter(p = proc) Single.add_filter(p) end
Register an event handler p
which is called everytime a line
in file_name
is executed.
Example:
Tracer.set_get_line_procs("example.rb", lambda { |line| puts "line number executed is #{line}" })
# File tracer.rb, line 251 def Tracer.set_get_line_procs(file_name, p = proc) Single.set_get_line_procs(file_name, p) end