summaryrefslogtreecommitdiffhomepage
path: root/src/backtrace.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-03-31 15:39:47 +0900
committerGitHub <[email protected]>2021-03-31 15:39:47 +0900
commitf2da051367b90d20db39a3faaafc5f97f1802e0f (patch)
tree0d64e70297dce4547fb0cc9ecdf360f5236da733 /src/backtrace.c
parentb7c23a4a14b02bf6255d21d372e099d6ee0c607a (diff)
parentc146e81c4ae318697d9f67a25e633dd071dfefd4 (diff)
downloadmruby-f2da051367b90d20db39a3faaafc5f97f1802e0f.tar.gz
mruby-f2da051367b90d20db39a3faaafc5f97f1802e0f.zip
Merge pull request #5394 from fundamental/partial-backtrace
Add support for partial backtraces
Diffstat (limited to 'src/backtrace.c')
-rw-r--r--src/backtrace.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/backtrace.c b/src/backtrace.c
index 70c82e2d1..c69af5955 100644
--- a/src/backtrace.c
+++ b/src/backtrace.c
@@ -61,7 +61,6 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, each_backtrace_func func, void *
idx = (uint32_t)(pc - irep->iseq);
loc.lineno = mrb_debug_get_line(mrb, irep, idx);
- if (loc.lineno == -1) continue;
loc.filename = mrb_debug_get_filename(mrb, irep, idx);
if (!loc.filename) {
@@ -202,7 +201,12 @@ mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace)
const struct backtrace_location *entry = &bt[i];
mrb_value btline;
- btline = mrb_format(mrb, "%s:%d", entry->filename, (int)entry->lineno);
+ if (entry->lineno != -1) {//debug info was available
+ btline = mrb_format(mrb, "%s:%d", entry->filename, (int)entry->lineno);
+ }
+ else { //all that was left was the stack frame
+ btline = mrb_format(mrb, "%s:missing-lineno", entry->filename);
+ }
if (entry->method_id != 0) {
mrb_str_cat_lit(mrb, btline, ":in ");
mrb_str_cat_cstr(mrb, btline, mrb_sym_name(mrb, entry->method_id));