2010-04-27 54 views
2

我正在编译* nix上的C++,我希望在程序中的任意点处生成堆栈转储 b)在任何信号期间,尤其是在SIGSEGV期间。谷歌告诉我,ptrace可能是工作的工具,但我找不到任何可以理解的步骤。获取返回地址,是的,但是下一个返回地址呢?那么在那个时候提取函数的符号名称呢?与DWARF有什么关系?使用ptrace生成堆栈转储

非常感谢,如果你能告诉我该从哪里出发。

回答

2

如果您使用的是glibc,那么GNU功能backtrace()backtrace_symbols()是执行此操作的最佳方法。无论如何,走栈是特定环境的,所以在每个平台上使用不可移植的原生函数都没有任何缺点。