除了调试之外,我还有一些关于调试符号以及可以用它们做什么的问题。我最感兴趣的是关于 GCC 的答案,但我也很高兴知道它在其他编译器下的样子,包括 MSVC。
首先:
- 调试符号的常见格式/类型是什么?
- 它们与编译器和平台有什么关系?平台之间的 GCC 和 MinGW 上的格式是否总是相同的?
- 我可以在运行时检查构建是否有它们以及它们的格式是什么?
还有一些更实际的问题......我怎么能:
- 检查当前文件和行号?
- 获取正在执行的(合格的)函数名?
- 获取完整的当前堆栈跟踪?
让我强调一下,我说的是运行时检查。所有这些都可以被 GDB 读取和打印出来,但我不知道有多少信息来自调试符号本身,还有多少来自 GDB 也可以访问的源代码。
也许有一个库能够解析调试符号并产生这样的信息?
调试符号是否标准化得足够好,以至于我可以期望此类解决方案具有一定程度的可移植性?