Just being curious: When I load a core file in gdb, the backtraces look like this:
...
Thread 2 (Thread 1109):
#0 0x2b03d968 in ?? ()
Thread 1 (Thread 23490):
#0 0x2b0c3624 in ?? ()
(gdb)
But after I load the binary using 'file', I get this:
...
#0 __pthread_cond_wait (cond=0x46b810, mutex=0x46b7f0) at pthread_cond_wait.c:156
#1 0x004076a8 in main (argc=1, argv=0x7fa66784) at idpoint.c:258
...
#0 0x2b0c3624 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:67
#1 0x2b0c8464 in *__GI_abort () at abort.c:88
#2 0x2b0faeec in __libc_message (do_abort=2, fmt=0x2b1d0840 "*** glibc detected *** %s: %s: 0x%s ***\n") at ../sysdeps/unix/sysv/linux/libc_fatal.c:173
#3 0x2b107e3c in malloc_printerr (action=3, str=0x2b1d0930 "free(): invalid next size (fast)", ptr=<value optimized out>) at malloc.c:5994
...
Question: Why doesn't gdb even make an attempt to display a call stack before symbols are loaded? My guess is that it has no idea of where segments are placed in memory and can't know which stack data to interpret as data vs. addresses? Is this correct?
It would be nice if it was possible to get gdb:s best attempt at displaying a call stack without symbols, to get an idea of stack depths, or for later interpretation...