From a1a6fd90bb4045b95963788fb923a9a54fdaf502 Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 2 Apr 2013 07:02:54 +0000 Subject: [PATCH] * vm_dump.c (rb_print_backtrace): separate to ease showing C backtrace. * internal.h (rb_print_backtrace): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ internal.h | 1 + vm_dump.c | 54 +++++++++++++++++++++++++++++------------------------- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index ccfdb56aea..0fad107c80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Apr 2 16:00:06 2013 NARUSE, Yui + + * vm_dump.c (rb_print_backtrace): separate to ease showing C backtrace. + + * internal.h (rb_print_backtrace): ditto. + Tue Apr 2 15:22:09 2013 NARUSE, Yui * test/ruby/envutil.rb (assert_separately): stop_auto_run of diff --git a/internal.h b/internal.h index fccbeb64f7..6cb6b91589 100644 --- a/internal.h +++ b/internal.h @@ -336,6 +336,7 @@ VALUE rb_sourcefilename(void); /* vm_dump.c */ void rb_vm_bugreport(void); +void rb_print_backtrace(void); /* vm_eval.c */ void Init_vm_eval(void); diff --git a/vm_dump.c b/vm_dump.c index 54de8ca6fc..d0bfe59e80 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -674,6 +674,34 @@ dump_thread(void *arg) } #endif +void +rb_print_backtrace(void) +{ +#if HAVE_BACKTRACE +#define MAX_NATIVE_TRACE 1024 + static void *trace[MAX_NATIVE_TRACE]; + int n = backtrace(trace, MAX_NATIVE_TRACE); + char **syms = backtrace_symbols(trace, n); + + if (syms) { +#ifdef USE_ELF + rb_dump_backtrace_with_lines(n, trace, syms); +#else + int i; + for (i=0; i