Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在 *nix 上编译 C++,我想在程序中的任意点生成堆栈转储 a),b) 在任何信号期间,尤其是在 SIGSEGV 期间。
谷歌告诉我 ptrace 可能是这项工作的工具,但我找不到任何可以理解的遍历堆栈的例子。得到返回地址,是的,但是 NEXT 的返回地址呢?那么在那个时候提取函数的符号名呢?与矮人有关吗?
非常感谢,如果你能告诉我从这里去哪里。
如果您使用的是 glibc,那么 GNU 函数backtrace()是backtrace_symbols()最好的方法。无论如何,遍历堆栈将是特定于环境的,因此在每个平台上使用不可移植的本机函数来完成它没有任何缺点。
backtrace()
backtrace_symbols()