Method: Kernel#set_trace_func
- Defined in:
- vm_trace.c
#set_trace_func(proc) ⇒ Proc #set_trace_func(nil) ⇒ nil
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.
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
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 |
# File 'vm_trace.c', line 578 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; } |