20 print_backtrace_i(
mrb_state *mrb,
void *stream,
int level,
const char *format, ...)
25 vfprintf((FILE*)stream, format, ap);
30 #define MIN_BUFSIZE 127
33 get_backtrace_i(
mrb_state *mrb,
void *stream,
int level,
const char *format, ...)
44 ary = mrb_obj_value((
struct RArray*)stream);
47 str =
mrb_str_new(mrb, 0, vsnprintf(NULL, 0, format, ap) + 1);
64 const char *filename, *method, *sep;
67 func(mrb, stream, 1,
"trace:\n");
72 for (i = ciidx; i >= 0; i--) {
93 if (line == -1)
continue;
100 filename =
"(unknown)";
108 func(mrb, stream, 1,
"\t[%d] ", i);
109 func(mrb, stream, 0,
"%s:%d:in %s%s%s", filename, line, cn, sep, method);
110 func(mrb, stream, 1,
"\n");
113 func(mrb, stream, 1,
"\t[%d] ", i);
114 func(mrb, stream, 0,
"%s:%d:in %s", filename, line, method);
115 func(mrb, stream, 1,
"\n");
119 func(mrb, stream, 1,
"\t[%d] ", i);
120 func(mrb, stream, 0,
"%s:%d", filename, line);
121 func(mrb, stream, 1,
"\n");
130 mrb_output_backtrace(mrb, mrb->
exc, print_backtrace_i, (
void*)stderr);