【发布时间】:2011-12-23 07:44:52
【问题描述】:
我有一个用 C 语言编写的程序,可以在 Linux、MacOS 和 Windows 上运行。有没有办法可以调用函数并生成堆栈跟踪?这对我来说非常有用。理想情况下,我想在所有三个平台上都这样做,但 Linux 是最重要的。 (Windows 正在通过 mingw 编译。)
谢谢。
【问题讨论】:
标签: c stack-trace
我有一个用 C 语言编写的程序,可以在 Linux、MacOS 和 Windows 上运行。有没有办法可以调用函数并生成堆栈跟踪?这对我来说非常有用。理想情况下,我想在所有三个平台上都这样做,但 Linux 是最重要的。 (Windows 正在通过 mingw 编译。)
谢谢。
【问题讨论】:
标签: c stack-trace
例如,在 GCC 和 GNU libc C 库中,您可以使用 backtrace()。
正如@slugonamission 所建议的,Windows 提供CaptureStackBackTrace() - 谢谢!
其他平台可能提供类似的功能。
(这显然是一个平台相关的问题。)
(在相关说明中,也存在self-disassembly libraries。)
【讨论】:
【讨论】:
Ian Lance Taylor 的 libbacktrace 做到了这一点。它处理堆栈展开并提供对 DWARF 调试符号的支持。
https://github.com/ianlancetaylor/libbacktrace
截至 2020 年 10 月,libbacktrace 支持带有 DWARF 调试信息的 ELF、PE/COFF、Mach-O 和 XCOFF 可执行文件。换句话说,它支持 GNU/Linux、*BSD、macOS、Windows 和 AIX。编写该库是为了方便地添加对其他目标文件和调试格式的支持。
【讨论】: