diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-10-23 02:02:50 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-10-23 02:02:50 +0000 |
commit | 3bd7384c76c439a80a7b2157888edb3d132c8cf2 (patch) | |
tree | 37daf6481bf6084a88d98300be6b975e0d01750a /vm_dump.c | |
parent | cb9ffb8d1cc1a784674e0f1594582b1406547dbd (diff) | |
download | ruby-3bd7384c76c439a80a7b2157888edb3d132c8cf2.tar.gz |
* 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
Diffstat (limited to 'vm_dump.c')
-rw-r--r-- | vm_dump.c | 42 |
1 files changed, 38 insertions, 4 deletions
@@ -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; i<RARRAY_LEN(vm->loaded_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__ */ + } } |