instance method
Kernel#set_trace_func
set_trace_func(proc) → proc
set_trace_func(nil) → nil
vm_trace.c
View on GitHub ↗
static VALUE
set_trace_func(VALUE obj, VALUE trace)
{
rb_remove_event_hook(call_trace_func);
if (NIL_P(trace)) {
return Qnil;
}
if (!rb_obj_is_proc(trace)) {
rb_raise(rb_eTypeError, "trace_func needs to be Proc");
}
rb_add_event_hook(call_trace_func, RUBY_EVENT_ALL, trace);
return trace;
}
Establishes proc as the handler for tracing, or disables tracing if the parameter is nil.
Note: this method is obsolete, please use TracePoint instead.
proc takes up to six parameters:
-
an event name string
-
a filename string
-
a line number
-
a method name symbol, or nil
-
a binding, or nil
-
the class, module, or nil
proc is invoked whenever an event occurs.
Events are:
"c-call"-
call a C-language routine
"c-return"-
return from a C-language routine
"call"-
call a Ruby method
"class"-
start a class or module definition
"end"-
finish a class or module definition
"line"-
execute code on a new line
"raise"-
raise an exception
"return"-
return from a Ruby method
Tracing is disabled within the context of proc.
Example
class Test def test a = 1 b = 2 end end set_trace_func proc { |event, file, line, id, binding, class_or_module| printf "%8s %s:%-2d %16p %14p\n", event, file, line, id, class_or_module } t = Test.new t.test
Produces:
c-return prog.rb:8 :set_trace_func Kernel
line prog.rb:11 nil nil
c-call prog.rb:11 :new Class
c-call prog.rb:11 :initialize BasicObject
c-return prog.rb:11 :initialize BasicObject
c-return prog.rb:11 :new Class
line prog.rb:12 nil nil
call prog.rb:2 :test Test
line prog.rb:3 :test Test
line prog.rb:4 :test Test
return prog.rb:5 :test Test