有没有办法在正常执行二进制文件后转储完整的堆栈跟踪?

时间:2015-07-08 11:21:59

标签: c

我想要完整的堆栈跟踪,主要是正常执行二进制文件时遍历的函数列表。

AFAIK,GDB仅在遇到断点或发生崩溃时提供跟踪。

2 个答案:

答案 0 :(得分:3)

这称为the call graph

这需要:

  • 仪表,即在进入/离开时记录每个功能的代码
  • 分析,即对节目的状态进行采样并记录检测到哪些功能
  • 仿真,即在假/虚拟CPU上运行程序并在跳转时记录

在上面,只有第一个提供100%的准确性,当然一般来说很难做到,因为你经常使用库,即使你有自己的代码也不会被检测到

这很难的原因是堆栈框架"历史"通常没有记录;一旦程序停止运行,就不会检查当前的堆栈帧,这与在调试器中打破时不同。

另见this question

答案 1 :(得分:0)

如果您的操作系统提供dtrace,则可以使用PID provider

  

pid提供商

     

pid提供程序允许跟踪用户进程中任何函数的输入和返回...