Skip to content

Instantly share code, notes, and snippets.

@leonerd
Created September 20, 2018 17:19
Show Gist options
  • Save leonerd/028a1eed963c1d3eac0758477c6805ca to your computer and use it in GitHub Desktop.
Save leonerd/028a1eed963c1d3eac0758477c6805ca to your computer and use it in GitHub Desktop.
--- perl-5.26.2-orig-util.c 2018-09-20 18:00:03.455252440 +0100
+++ perl-5.26.2-edited-util.c 2018-09-20 18:03:31.026429614 +0100
@@ -4814,7 +4814,7 @@
/* -DPERL_MEM_LOG_SPRINTF_BUF_SIZE=X: size of a (stack-allocated) buffer
* the Perl_mem_log_...() will use (either via sprintf or snprintf).
*/
-#define PERL_MEM_LOG_SPRINTF_BUF_SIZE 128
+#define PERL_MEM_LOG_SPRINTF_BUF_SIZE 256
/* -DPERL_MEM_LOG_FD=N: the file descriptor the Perl_mem_log_...()
* writes to. In the default logger, this is settable at runtime.
@@ -4920,6 +4920,24 @@
len = 0;
}
PERL_UNUSED_RESULT(PerlLIO_write(fd, buf, len));
+ if(strchr(pmlenv,'c') && (mlt == MLT_NEW_SV)) {
+ Perl_c_backtrace *bt = Perl_get_c_backtrace(aTHX_ 3, 3);
+ Perl_c_backtrace_frame *frame;
+ int i;
+ for (i = 0, frame = bt->frame_info;
+ i < bt->header.frame_count;
+ i++, frame++) {
+ len = my_snprintf(buf, sizeof(buf),
+ " frame[%d]: %p %s at %s +0x%lx\n",
+ i,
+ frame->addr,
+ frame->symbol_name_size && frame->symbol_name_offset ? (char *)bt + frame->symbol_name_offset : "-",
+ frame->object_name_size && frame->object_name_offset ? (char *)bt + frame->object_name_offset : "?",
+ frame->addr - frame->object_base_addr);
+ PerlLIO_write(fd, buf, len);
+ }
+ Perl_free_c_backtrace(aTHX_ bt);
+ }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment