程序中可以自行打印调用栈,http://blog.ddup.us/2011/03/15/let-program-exit-elegantly/改文章说的比较详细。
写了一个测试demo: gcc -g -rdynamic编译
1 #include <stdio.h>
2 #include <execinfo.h>3 void print_trace()
4 {
5 int trace_size;
6 int i;
7 void *trace[100];
8 char **message = NULL;
9
10 trace_size = backtrace(trace, 100);
11 message = backtrace_symbols(trace, trace_size);
12 for (i = 0; i < trace_size; i++)
13 {
14 printf("%s\n", message[i]);
15 }
16 return;
17 }
18
19 void func2()
20 {
21 print_trace();
22 }
23
24 void func1()
25 {
26 func2();
27 }
28
29
30 int main(int argc, char **argv)
31 {
32 func1();
33 return 0;
34 }