打印函数调用堆栈
打印 堆栈 函数调用
2023-09-27 14:28:06 时间
有时候调试bug需要知道某个函数从哪里调用导致出了问题的,就需要打印函数调用堆栈信息,在Linux可以使用backtrace函数来实现,下面是一个简单的例子:
1 #include <cstdio> 2 #include <cstdlib> 3 #include <execinfo.h> 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
执行结果:
相关文章
- Xposed框架Hook Android应用的所有类方法打印Log日志
- iOS10屏蔽系统调试打印Log
- 【算法】【二叉树模块】打印树的边界值(双标准)
- 从尾到头打印链表
- 如何设置AltiumDesign打印小型热转印纸
- 横着打印二叉树的形状,形状真的和二叉树一样,而不是遍历二叉树
- Linux如何使用gdb打印变量的地址
- 打印并输出 log/日志到文件(C++)
- (第20列)C语言典型列题:分解一个不多于五位的数字,分别打印各位数并且判断是几位数。
- ireport简单报表打印
- 【ESP8266之SDK开发】二、实现串口打印Hello Esp8266
- 质数计算打印程序代码
- Python打印到屏幕_读取键盘输入
- Java小白入门200例59之用Calendar实现日历的打印
- 螺旋矩阵的几种打印形式
- CAD打印后图形不显示?CAD颜色,知多少?
- 调试C调lua模块之打印luaL_dofile错误信息
- Larevel5.1 打印SQL语句