Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263726
  • 博文数量: 107
  • 博客积分: 535
  • 博客等级: 下士
  • 技术积分: 1030
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-27 14:13
文章分类

全部博文(107)

文章存档

2024年(1)

2021年(10)

2020年(4)

2019年(2)

2018年(5)

2017年(6)

2016年(10)

2015年(15)

2014年(16)

2013年(25)

2012年(9)

2010年(4)

我的朋友

分类: 其他平台

2021-01-09 09:19:11

程序执行的过程中,不知道这个函数是谁发起的调用,那么可以通过这样的方式将函数的调用路径打印出来。
在函数中增加一下语句

点击(此处)折叠或打开

  1. void *bt[20];
  2.  char **strings;
  3.  size_t sz;

  4.  sz = backtrace(bt, 20);
  5.  strings = backtrace_symbols(bt, sz);
  6.         for(i = 0; i < sz; ++i)
  7.                 fprintf(stderr, "%s/n", strings[i]);
在程序链接的时候,加入 -rdynamic参数,将函数的符号表编译到程序里面,否则将只会打印函数的16进制地址。
如下所示一个函数调用的路径,被清楚的打印了

点击(此处)折叠或打开

  1. ./build/exe/Z3GatewayHost() [0x4579ec]
  2. ./build/exe/Z3GatewayHost(emberAfSendUnicastToBindingsWithCallback+0xcc) [0x45835b]
  3. ./build/exe/Z3GatewayHost(emberAfSendCommandUnicastToBindingsWithCallback+0x33) [0x45cdf8]
  4. ./build/exe/Z3GatewayHost() [0x44a271]
  5. ./build/exe/Z3GatewayHost(emberAfPluginReportingTickEventHandler+0x226) [0x449f7a]
  6. ./build/exe/Z3GatewayHost(emberRunEvents+0x7c) [0x4260cb]
  7. ./build/exe/Z3GatewayHost(emberRunTask+0x3b) [0x42611c]
  8. ./build/exe/Z3GatewayHost(emberAfRunEvents+0x1e) [0x45730d]
  9. ./build/exe/Z3GatewayHost(emberAfMain+0xf7) [0x462dbc]
  10. ./build/exe/Z3GatewayHost(main+0x2a) [0x44c00e]
  11. /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f6a674ea840]
  12. ./build/exe/Z3GatewayHost(_start+0x29) [0x41ee49]



阅读(1763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~