void mrb_print_backtrace(mrb_state *mrb) { #ifdef ENABLE_STDIO exc_output_backtrace(mrb, mrb->exc, print_backtrace_i, (void*)stderr); #endif }
mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value self) { mrb_value ary; ary = mrb_ary_new(mrb); exc_output_backtrace(mrb, mrb_obj_ptr(self), get_backtrace_i, (void*)mrb_ary_ptr(ary)); return ary; }
MRB_API void mrb_print_backtrace(mrb_state *mrb) { struct print_backtrace_args args; if (!mrb->exc || mrb_obj_is_kind_of(mrb, mrb_obj_value(mrb->exc), E_SYSSTACK_ERROR)) { return; } args.stream = stderr; args.tracehead = TRUE; exc_output_backtrace(mrb, mrb->exc, print_backtrace_i, (void*)&args); }
MRB_API void mrb_print_backtrace(mrb_state *mrb) { mrb_value backtrace; if (!mrb->exc) { return; } backtrace = mrb_obj_iv_get(mrb, mrb->exc, mrb_intern_lit(mrb, "backtrace")); if (!mrb_nil_p(backtrace)) { print_backtrace(mrb, backtrace); } else if (mrb->backtrace.n > 0) { print_backtrace_saved(mrb); } else { struct print_backtrace_args args; args.stream = stderr; args.tracehead = TRUE; exc_output_backtrace(mrb, mrb->exc, print_backtrace_i, (void*)&args); } }