diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-05-28 07:36:20 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-05-28 07:36:20 +0900 |
| commit | 2a717cf2aa47993c460455d55d6cc23223578f98 (patch) | |
| tree | b0a4b9554aaae453699eca8da43289cab2a68a44 /src/backtrace.c | |
| parent | cefbc21e6762bada94612caea5a7c592cc4a2ad3 (diff) | |
| download | mruby-2a717cf2aa47993c460455d55d6cc23223578f98.tar.gz mruby-2a717cf2aa47993c460455d55d6cc23223578f98.zip | |
backtrace.c: do not skip frames for C function calls.
Diffstat (limited to 'src/backtrace.c')
| -rw-r--r-- | src/backtrace.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/backtrace.c b/src/backtrace.c index 6d7e8b33b..7ff1cea6c 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -38,27 +38,29 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void * for (ptrdiff_t i=ciidx; i >= 0; i--) { struct backtrace_location loc; mrb_callinfo *ci; - const mrb_irep *irep; + const mrb_irep *irep = 0; const mrb_code *pc; uint32_t idx; ci = &mrb->c->cibase[i]; - if (!ci->proc) continue; - if (MRB_PROC_CFUNC_P(ci->proc)) continue; - - irep = ci->proc->body.irep; - if (!irep) continue; - if (mrb->c->cibase[i].pc) { - pc = &mrb->c->cibase[i].pc[-1]; + if (!ci->proc || MRB_PROC_CFUNC_P(ci->proc)) { + loc.lineno = -1; + idx = 0; } else { - continue; + irep = ci->proc->body.irep; + if (!irep) continue; + if (mrb->c->cibase[i].pc) { + pc = &mrb->c->cibase[i].pc[-1]; + } + else { + continue; + } + idx = (uint32_t)(pc - irep->iseq); + loc.lineno = mrb_debug_get_line(mrb, irep, idx); } - loc.method_id = ci->mid; - idx = (uint32_t)(pc - irep->iseq); - loc.lineno = mrb_debug_get_line(mrb, irep, idx); if (loc.lineno == -1) { for (ptrdiff_t j=i-1; j >= 0; j--) { ci = &mrb->c->cibase[j]; |
