打印函数调用堆栈
有时候调试bug需要知道某个函数从哪里调用导致出了问题的,就需要打印函数调用堆栈信息,在Linux可以使用backtrace函数来实现,下面是一个简单的例子:
1 #include2 #include 3 #include 4 5 using namespace std; 6 7 void Test3(int i) 8 { 9 printf("Hello world!\n"); 10 11 int nptrs; 12 void *buffer[100]; 13 char **strings; 14 15 nptrs = backtrace(buffer, 10); 16 printf("backtrace returned %d address\n", nptrs); 17 strings = backtrace_symbols(buffer, nptrs); 18 for (int j = 0; j < nptrs; ++j) 19 { 20 printf("%s\n", strings[j]); 21 } 22 23 free(strings); 24 } 25 26 void Test2(int i) 27 { 28 Test3(i); 29 } 30 31 void Test1(int i) 32 { 33 Test2(i); 34 } 35 36 int main(int argc, char **argv) 37 { 38 Test1(1); 39 40 return 0; 41 }
编译:
g++ -rdynamic -o testDumpStack ./testDumpStack.cpp
执行结果:

转载于:https://www.cnblogs.com/lit10050528/p/6056283.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
