static VALUE tracepoint_inspect(VALUE self) { rb_tp_t *tp = tpptr(self); rb_trace_arg_t *trace_arg = GET_THREAD()->trace_arg; if (trace_arg) { switch (trace_arg->event) { case RUBY_EVENT_LINE: case RUBY_EVENT_SPECIFIED_LINE: { VALUE sym = rb_tracearg_method_id(trace_arg); if (NIL_P(sym)) goto default_inspect; return rb_sprintf("#<TracePoint:%"PRIsVALUE"@%"PRIsVALUE":%d in `%"PRIsVALUE"'>", rb_tracearg_event(trace_arg), rb_tracearg_path(trace_arg), FIX2INT(rb_tracearg_lineno(trace_arg)), sym); } case RUBY_EVENT_CALL: case RUBY_EVENT_C_CALL: case RUBY_EVENT_RETURN: case RUBY_EVENT_C_RETURN: return rb_sprintf("#<TracePoint:%"PRIsVALUE" `%"PRIsVALUE"'@%"PRIsVALUE":%d>", rb_tracearg_event(trace_arg), rb_tracearg_method_id(trace_arg), rb_tracearg_path(trace_arg), FIX2INT(rb_tracearg_lineno(trace_arg))); case RUBY_EVENT_THREAD_BEGIN: case RUBY_EVENT_THREAD_END: return rb_sprintf("#<TracePoint:%"PRIsVALUE" %"PRIsVALUE">", rb_tracearg_event(trace_arg), rb_tracearg_self(trace_arg)); default: default_inspect: return rb_sprintf("#<TracePoint:%"PRIsVALUE"@%"PRIsVALUE":%d>", rb_tracearg_event(trace_arg), rb_tracearg_path(trace_arg), FIX2INT(rb_tracearg_lineno(trace_arg))); } } else { return rb_sprintf("#<TracePoint:%s>", tp->tracing ? "enabled" : "disabled"); } }
static void trace_print(rb_trace_arg_t * trace_arg, debug_context_t * dc, const char *file_filter, const char *debug_msg) { char *fullpath = NULL; const char *basename; int filtered = 0; const char *event = rb_id2name(SYM2ID(rb_tracearg_event(trace_arg))); VALUE rb_path = rb_tracearg_path(trace_arg); const char *path = NIL_P(rb_path) ? "" : RSTRING_PTR(rb_path); int line = NUM2INT(rb_tracearg_lineno(trace_arg)); VALUE rb_mid = rb_tracearg_method_id(trace_arg); const char *mid = NIL_P(rb_mid) ? "(top level)" : rb_id2name(SYM2ID(rb_mid)); VALUE rb_cl = rb_tracearg_defined_class(trace_arg); VALUE rb_cl_name = NIL_P(rb_cl) ? rb_cl : rb_mod_name(rb_cl); const char *defined_class = NIL_P(rb_cl_name) ? "" : RSTRING_PTR(rb_cl_name); if (!trace_arg) return; if (file_filter) { #ifndef _WIN32 fullpath = realpath(path, NULL); #endif basename = fullpath ? strrchr(fullpath, '/') : path; if (!basename || strncmp(basename + 1, file_filter, strlen(file_filter))) filtered = 1; #ifndef _WIN32 free(fullpath); #endif } if (!filtered) { if (debug_msg) rb_funcall(mByebug, idPuts, 1, rb_sprintf("[#%d] %s\n", dc->thnum, debug_msg)); else rb_funcall(mByebug, idPuts, 1, rb_sprintf("%*s [#%d] %s@%s:%d %s#%s\n", dc->calced_stack_size, "", dc->thnum, event, path, line, defined_class, mid)); } }
static void trace_print(rb_trace_arg_t *trace_arg, debug_context_t *dc) { if (trace_arg) { const char *event = rb_id2name(SYM2ID(rb_tracearg_event(trace_arg))); char *path = RSTRING_PTR(rb_tracearg_path(trace_arg)); int line = NUM2INT(rb_tracearg_lineno(trace_arg)); VALUE v_mid_sym = rb_tracearg_method_id(trace_arg); VALUE v_mid_id = NIL_P(v_mid_sym) ? Qnil : SYM2ID(v_mid_sym); const char *mid = NIL_P(v_mid_id) ? "" : rb_id2name(v_mid_id); printf("%*s (%d)->[#%d] %s@%s:%d %s\n", dc->calced_stack_size, "", dc->calced_stack_size, dc->thnum, event, path, line, mid); } }
static void trace_print(rb_trace_arg_t *trace_arg, debug_context_t *dc) { if (trace_arg) { int i = 0; VALUE path = rb_tracearg_path(trace_arg); VALUE line = rb_tracearg_lineno(trace_arg); VALUE event = rb_tracearg_event(trace_arg); VALUE mid = rb_tracearg_method_id(trace_arg); for (i=0; i<dc->calced_stack_size; i++) putc('|', stderr); fprintf(stderr, "[#%d] %s@%s:%d %s\n", dc->thnum, rb_id2name(SYM2ID(event)), RSTRING_PTR(path), NUM2INT(line), NIL_P(mid) ? "" : rb_id2name(SYM2ID(mid))); } }
static void trace_print(rb_trace_arg_t *trace_arg, debug_context_t *dc) { if (trace_arg) { const char *event = safe_sym_to_str(rb_tracearg_event(trace_arg)); VALUE path_sym = rb_tracearg_path(trace_arg); const char *path = NIL_P(path_sym) ? "" : RSTRING_PTR(path_sym); int line = NUM2INT(rb_tracearg_lineno(trace_arg)); const char *mid = safe_sym_to_str(rb_tracearg_method_id(trace_arg)); rb_funcall(mByebug, rb_intern("puts"), 1, rb_sprintf("%*s (%d)->[#%d] %s@%s:%d %s\n", dc->calced_stack_size, "", dc->calced_stack_size, dc->thnum, event, path, line, mid)); } }
/* * Type of event * * See TracePoint@Events for more information. */ static VALUE tracepoint_attr_event(VALUE tpval) { return rb_tracearg_event(get_trace_arg()); }