Getting a backtrace from running C code
Published on: 2006-9-12
Getting a backtrace from running C code
2006-09-12T23:04:00
Came across two interesting GNU libc functions which helps us to get backtraces without using gdb. The backtrace function accepts an array of void*'s and fills it up with return addresses along the call chain - the total number of addresses stored is returned. The backtrace_symbols function accepts this array and returns an array of pointers to strings (function names). It seems you have to compile the code with the -rdynamic option to get proper function names.
fun1() { int size, i; void *buf[100]; char **fnames; size = backtrace(buf, 100); printf("size = %d\n", size); fnames = backtrace_symbols(buf, size); for(i = 0; i < size; i++) printf("%s\n", fnames[i]); } fun2() { fun1(); } main() { fun2(); }