diff options
-rw-r--r-- | prelude.rb | 57 | ||||
-rw-r--r-- | vm_trace.c | 42 |
2 files changed, 62 insertions, 37 deletions
diff --git a/prelude.rb b/prelude.rb index 17f3f5052a..e7125d4de8 100644 --- a/prelude.rb +++ b/prelude.rb @@ -133,6 +133,63 @@ class IO end class TracePoint + # call-seq: + # trace.enable(target: nil, target_line: nil) -> true or false + # trace.enable(target: nil, target_line: nil) { block } -> obj + # + # Activates the trace + # + # Return +true+ if trace was enabled. + # Return +false+ if trace was disabled. + # + # trace.enabled? #=> false + # trace.enable #=> false (previous state) + # # trace is enabled + # trace.enabled? #=> true + # trace.enable #=> true (previous state) + # # trace is still enabled + # + # If a block is given, the trace will only be enabled within the scope of the + # block. + # + # trace.enabled? + # #=> false + # + # trace.enable do + # trace.enabled? + # # only enabled for this block + # end + # + # trace.enabled? + # #=> false + # + # <i>target</i> and <i>target_line</i> parameters are used to limit tracing + # only to specified code objects. <i>target</i> should be a code object for + # which RubyVM::InstructionSequence.of will return instruction sequence. + # + # t = TracePoint.new(:line) { |tp| p tp } + # + # def m1 + # p 1 + # end + # + # def m2 + # p 2 + # end + # + # t.enable(target: method(:m1)) + # + # m1 + # # prints #<TracePoint:line@test.rb:5 in `m1'> + # m2 + # # prints nothing + # + # + # Note: You cannot access event hooks within the +enable+ block. + # + # trace.enable { p tp.lineno } + # #=> RuntimeError: access from outside + # def enable target: nil, target_line: nil, target_thread: nil, &blk self.__enable target, target_line, target_thread, &blk end diff --git a/vm_trace.c b/vm_trace.c index 78e35143c1..7fb8b7a24f 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -1058,7 +1058,8 @@ tracepoint_attr_path(VALUE tpval) } /* - * Return the parameters of the method or block that the current hook belongs to + * Return the parameters definition of the method or block that the + * current hook belongs to. Format is the same as for Method#parameters */ static VALUE tracepoint_attr_parameters(VALUE tpval) @@ -1361,42 +1362,8 @@ rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval) list->events = events; } -/* - * call-seq: - * trace.enable -> true or false - * trace.enable { block } -> obj - * - * Activates the trace - * - * Return true if trace was enabled. - * Return false if trace was disabled. - * - * trace.enabled? #=> false - * trace.enable #=> false (previous state) - * # trace is enabled - * trace.enabled? #=> true - * trace.enable #=> true (previous state) - * # trace is still enabled - * - * If a block is given, the trace will only be enabled within the scope of the - * block. - * - * trace.enabled? - * #=> false - * - * trace.enable do - * trace.enabled? - * # only enabled for this block - * end - * - * trace.enabled? - * #=> false - * - * Note: You cannot access event hooks within the block. - * - * trace.enable { p tp.lineno } - * #=> RuntimeError: access from outside - * +/* :nodoc: + * Docs for the TracePointe#enable are in prelude.rb */ static VALUE tracepoint_enable_m(VALUE tpval, VALUE target, VALUE target_line, VALUE target_thread) @@ -1792,6 +1759,7 @@ Init_vm_trace(void) * +:thread_begin+:: event hook at thread beginning * +:thread_end+:: event hook at thread ending * +:fiber_switch+:: event hook at fiber switch + * +:script_compiled+:: new Ruby code compiled (with +eval+, +load+ or +require+) * */ rb_cTracePoint = rb_define_class("TracePoint", rb_cObject); |