使用ptrace生成堆栈转储

时间:2010-04-27 20:11:27

标签: c unix stack ptrace dwarf

我在* nix上编译C ++,我想生成一个堆栈转储 a)在程序的任意点, b)在任何信号期间,特别是在SIGSEGV期间。

谷歌告诉我,ptrace可能是这项工作的工具,但我找不到任何可理解的走路堆栈的例子。获取返回地址,是的,但NEXT返回地址怎么样?那么在那个时候提取函数的符号名称呢?与DWARF有关吗?

非常感谢你能告诉我从哪里开始。

1 个答案:

答案 0 :(得分:2)

如果您正在使用glibc,那么GNU函数backtrace()backtrace_symbols()是执行此操作的最佳方法。无论如何,遍历堆栈都将是特定于环境的,因此在每个平台上使用非可移植的本机函数都没有任何缺点。