【问题标题】:How to get the gdb call stack trace?如何获取 gdb 调用堆栈跟踪?
【发布时间】:2020-08-19 13:49:20
【问题描述】:

我有一个核心转储和一个存储调试信息的文件,我可以在不使用可执行文件的情况下使用 gdb 来获取具有函数和行名称的调用堆栈吗?

【问题讨论】:

  • 什么是“存储调试信息的文件”?
  • g++ source.cpp -g -o executable_file; objcopy --only-keep-debug executable_file debug_file; debug_file - 调试信息文件

标签: linux debugging gdb coredump


【解决方案1】:

我可以在不使用可执行文件的情况下使用 gdb 来获取带有函数名和行名的调用堆栈吗?

至少在 Linux/x86_64 上,答案是否定的:objcopy --only-keep-debug 之后保存的信息是不够的;您还需要可执行文件。

发生这种情况(至少部分)是因为debug_file 没有.eh_frame 部分,这是在x86_64 上展开所必需的。

如果您自己调试核心转储,则没有理由创建 debug_file - 只需保留带有完整调试信息的原始可执行文件以进行调试(您仍然可以将较小的剥离文件发送到执行机器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2011-05-19
    • 2011-06-15
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多