2

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

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

非常感谢,如果你能告诉我从这里去哪里。

4

1 回答 1

2

如果您使用的是 glibc,那么 GNU 函数backtrace()backtrace_symbols()最好的方法。无论如何,遍历堆栈将是特定于环境的,因此在每个平台上使用不可移植的本机函数来完成它没有任何缺点。

于 2010-04-28T00:06:33.083 回答