End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
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
-
a filename
-
a line number
-
an object id
-
a binding
-
the name of a class
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.
class Test
def test
a = 1
b = 2
end
end
set_trace_func proc { |event, file, line, id, binding, classname|
printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
}
t = Test.new
t.test
line prog.rb:11 false
c-call prog.rb:11 new Class
c-call prog.rb:11 initialize Object
c-return prog.rb:11 initialize Object
c-return prog.rb:11 new Class
line prog.rb:12 false
call prog.rb:2 test Test
line prog.rb:3 test Test
line prog.rb:4 test Test
return prog.rb:4 test Test