我刚读过
现在已经很老了(5年)。一些答案建议的解决方案允许您为每个堆栈帧获取函数的名称和偏移量(我猜在堆栈内)。但我(可能还有其他人)真正需要的是进行调用的源文件名和行号(假设代码是使用调试信息编译的)。与执行此操作的 glibc 的一部分相关的答案之一(libSegfault;请参阅此目录中的文件- segfault.c
, backtracesyms.c
, backtracesymsfd.c
) - 所以它是可能的。
我的问题是:
- 是否可以以独立于平台的方式或符合某些标准(POSIX??)的方式提取此信息
- 为什么 libunwind 不支持这个?(我认为不是,在浏览了他们的网站后)
- 这是否一定取决于您的编译器的 C/C++ 标准库(至少对于 C/C++ 应用程序)?
笔记:
- 你可以假设二进制文件有调试信息,所以在 C/C++ 的情况下,它是用
-g
;编译的。当然,在适当的库中,我们会检查调试信息是否可用。