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 * 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

Overloads:

  • #set_trace_func(proc) ⇒ Proc

    Returns:

  • #set_trace_func(nil) ⇒ nil

    Returns:

    • (nil)
[View source]

524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
# File 'vm_trace.c', line 524

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;
}