c - 使用 ptrace 生成堆栈转储

标签 c unix stack ptrace dwarf

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

Google 告诉我 ptrace 可能是完成这项工作的工具,但我找不到任何可理解的遍历堆栈的示例。获取返回地址,是的,但是 NEXT 返回地址呢?那么在那个时候提取函数的符号名称呢?与 DWARF 有关?

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

最佳答案

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

关于c - 使用 ptrace 生成堆栈转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724702/

相关文章:

flash - Flash AS3错误堆栈路径

c - 不透明的 C 结构 : various ways to declare them

c++ - 是否有任何 C++ API 可用于了解操作系统描述?

c++ - 固定大小 std::vector

linux - Bash 脚本变量解释

java - 如何使用服务器端代码在客户端计算机中创建和执行批处理文件?

JAVA线程(不同栈)同步

java - 使用 JNI 将数据类型从 Java 传递到 C(反之亦然)

c - 右移计数 >= 类型宽度或左移计数 >= 类型宽度

c - C 预处理器的 Null 指令有什么意义?