How can I generate a stack dump from within a running program?

How can I generate a stack dump from within a running program?


Some systems provide library functions for unwinding the stack, so that
you can (for example) generate a stack dump in an error-handling
function. However, these are highly system-specific, and only a minority
of systems have them.



A possible workaround is to get your program to invoke a debugger
on itself -- the details still vary slightly between systems, but
the general idea is to do this:




void dump_stack(void)
{
char s[160];

sprintf(s, "/bin/echo 'where\ndetach' | dbx -a %d", getpid());
system(s);

return;
}



You will need to tweak the commands and parameters to dbx according to
your system, or even substitute another debugger such as gdb,
but this is still the most general solution to this particular problem
that I've ever seen. Kudos to Ralph Corderoy for this one :-)



Here's a list of the command lines required for some systems:




Most systems using dbx

"/bin/echo 'where\ndetach' | dbx /path/to/program %d"

AIX

"/bin/echo 'where\ndetach' | dbx -a %d"

IRIX

"/bin/echo 'where\ndetach' | dbx -p %d"






Home FAQ