Importing debug information into dbx
Tags: dbxI’m sure I wrote this up somewhere before, but now I can’t find it. Just in case you guys (my two faithful readers) haven’t seen this trick yet. If you are stuck with a core file that doesn’t have debug information, you can “import” debugging information using the “loadobject -load” command. It’s especially useful for C++ to help get rid of the mangled names that show up in stack traces.
% ######################### % more t.c #include "t.h" struct foo foofoo; int main() { foofoo.a = 1; foofoo.b = 2; * (int *) 0 = 0; } % ######################### % more t.h struct foo { int a; int b; }; % ######################### % cc -o t t.c # no debug info % ######################### % ./t Segmentation Fault (core dumped) % ######################### % dbx t core Reading t core file header read successfully Reading ld.so.1 Reading libc.so.1 Reading libdl.so.1 Reading libc_psr.so.1 program terminated by signal SEGV (no mapping at the fault address) 0x00010bb4: main+0x001c: clr [0] (dbx) whatis foofoo dbx: warning: unknown language, 'c' assumed (int {assumed}) foofoo; (dbx) print foofoo foofoo = 0x1 (dbx) whatis -t foo dbx: "foo" is not defined in the scope `t`main` dbx: see `help scope' for details (dbx) quit % # % # You really want to see the contents of the 'foofoo' % # structure, but the binary doesn't have debug info! % # So create a dummy .so file with debug info, and load % # that into dbx manually. % # % ######################### % more dummy.c #include "t.h" % ######################### % cc -G -g -o dummy.so dummy.c % ######################### % dbx t core Reading t core file header read successfully Reading ld.so.1 Reading libc.so.1 Reading libdl.so.1 Reading libc_psr.so.1 program terminated by signal SEGV (no mapping at the fault address) 0x00010bb4: main+0x001c: clr [0] (dbx) loadobject -load dummy.so Reading dummy.so Loaded loadobject: /set/dbx/somewhere/misc/coretest/dummy.so (dbx) modules | grep dummy Not Read dummy.o (dbx) module dummy.o Read dummy.o (dbx) whatis -t foo struct foo { int a; int b; }; (dbx) print *(struct foo*)&foofoo dbx: warning: unknown language, 'c' assumed *((struct foo *) &foofoo) = { a = 0x1 b = 0x2 }