如何获取 gdb 调用堆栈跟踪?
Posted
技术标签:
【中文标题】如何获取 gdb 调用堆栈跟踪?【英文标题】:How to get the gdb call stack trace? 【发布时间】:2020-08-19 13:49:20 【问题描述】:我有一个核心转储和一个存储调试信息的文件,我可以在不使用可执行文件的情况下使用 gdb 来获取具有函数和行名称的调用堆栈吗?
【问题讨论】:
什么是“存储调试信息的文件”? g++ source.cpp -g -o executable_file; objcopy --only-keep-debug executable_file debug_file; debug_file - 调试信息文件 【参考方案1】:我可以在不使用可执行文件的情况下使用 gdb 来获取带有函数名和行名的调用堆栈吗?
至少在 Linux/x86_64 上,答案是否定的:objcopy --only-keep-debug
之后保存的信息是不够的;您还需要可执行文件。
发生这种情况(至少部分)是因为debug_file
没有.eh_frame
部分,这是在x86_64
上展开所必需的。
如果您自己调试核心转储,则没有理由创建 debug_file
- 只需保留带有完整调试信息的原始可执行文件以进行调试(您仍然可以将较小的剥离文件发送到执行机器)。
【讨论】:
以上是关于如何获取 gdb 调用堆栈跟踪?的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Detours 如何工作以及如何使用它来获取堆栈跟踪?