From 3bd7384c76c439a80a7b2157888edb3d132c8cf2 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 23 Oct 2010 02:02:50 +0000 Subject: * vm_dump.c (rb_vm_bugreport): fix to add bug outputs. - loaded script ($0) - loaded features ($") - process memory map on Linux (/proc/self/maps) * vm_dump.c (rb_vmdebug_stack_dump_raw): fix header message. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ vm_dump.c | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9a894da9bb..919bc11ec1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sat Oct 23 10:55:37 2010 Koichi Sasada + + * vm_dump.c (rb_vm_bugreport): fix to add bug outputs. + - loaded script ($0) + - loaded features ($") + - process memory map on Linux (/proc/self/maps) + + * vm_dump.c (rb_vmdebug_stack_dump_raw): fix header message. + Fri Oct 22 14:50:13 2010 Nobuyoshi Nakada * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert): diff --git a/vm_dump.c b/vm_dump.c index cc36d558eb..c865386354 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -170,12 +170,13 @@ rb_vmdebug_stack_dump_raw(rb_thread_t *th, rb_control_frame_t *cfp) } #endif - fprintf(stderr, "-- control frame ----------\n"); + fprintf(stderr, "-- Control frame information " + "-----------------------------------------------\n"); while ((void *)cfp < (void *)(th->stack + th->stack_size)) { control_frame_dump(th, cfp); cfp++; } - fprintf(stderr, "---------------------------\n"); + fprintf(stderr, "\n"); } void @@ -761,7 +762,8 @@ dump_thread(void *arg) void rb_vm_bugreport(void) { - if (GET_THREAD()->vm) { + rb_vm_t *vm = GET_VM(); + if (vm) { int i = 0; SDR(); @@ -797,5 +799,37 @@ rb_vm_bugreport(void) } fprintf(stderr, "\n"); -#endif +#endif /* HAVE_BACKTRACE */ + + fprintf(stderr, "-- Other runtime information " + "-----------------------------------------------\n\n"); + { + int i; + + fprintf(stderr, "* Loaded script: %s\n", StringValueCStr(vm->progname)); + fprintf(stderr, "\n"); + fprintf(stderr, "* Loaded features:\n\n"); + for (i=0; iloaded_features); i++) { + fprintf(stderr, " %4d %s\n", i, StringValueCStr(RARRAY_PTR(vm->loaded_features)[i])); + } + fprintf(stderr, "\n"); + +#if __linux__ + { + FILE *fp = fopen("/proc/self/maps", "r"); + if (fp) { + fprintf(stderr, "* Process memory map:\n\n"); + + while (!feof(fp)) { + char buff[0x100]; + size_t rn = fread(buff, 1, 0x100, fp); + fwrite(buff, 1, rn, stderr); + } + + fclose(fp); + fprintf(stderr, "\n\n"); + } + } +#endif /* __linux__ */ + } } -- cgit v1.2.3