【问题标题】:Find the path of the source code for the executable being currently debugged in GDB在 GDB 中查找当前正在调试的可执行文件的源代码路径
【发布时间】:2009-12-15 12:09:54
【问题描述】:

我可以在 main 中设置断点并使用正确的源代码调试代码,但我不知道 GDB 从哪里获取源代码。

源代码不在CWD(当前工作目录)中。

如何找到 GDB 从哪个位置获取代码?

【问题讨论】:

    标签: gdb


    【解决方案1】:

    您可以使用 GDB 命令:

    info source
    

    样本输出:

    Current source file is a.c
    Compilation directory is /home/user/test
    Located in /home/user/test/a.c
    Contains 17 lines.
    Source language is c.
    Compiled with DWARF 2 debugging format.
    Includes preprocessor macro info.
    

    【讨论】:

    • gdb 在哪里存储这个源代码位置?它在可执行文件本身中吗?
    • 在使用调试信息构建的可执行文件本身中。
    • 如果 GDB 已经将信息存储在可执行文件中,为什么还需要 source 呢?
    • 目录可以在编译和调试会话之间移动
    • @ernesto 我认为它只存储了行号映射(行表)的指令,而不是实际的源代码。例如,strings a.out 不显示来源。
    【解决方案2】:

    使用

    (gdb) show directories
    

    如果您不知道这些目录的设置位置,请检查您的 .gdbinit 文件以查看是否有类似

    的语句
    directory /path/to/source
    

    另见this other Stack Overflow question about GDB

    【讨论】:

      【解决方案3】:

      此信息以DWARF2 格式保存在二进制文件中。因此,为了查看 DWARF2 信息,您可以使用 dwarfdump 实用程序。所需信息保存在 DW_AT_comp_dir 字段中。

      【讨论】:

        【解决方案4】:

        二进制文件可能是用“-g”编译的——即调试。

        【讨论】:

        • 这并不意味着源被编译成二进制文件。
        • 但这确实意味着保留对原始来源的引用。我已经在我的系统上试过了,它可以工作。
        【解决方案5】:

        使用 GDB“显示目录”命令查看源搜索路径。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-20
          • 1970-01-01
          • 2010-11-04
          • 2018-01-31
          • 2010-10-14
          • 1970-01-01
          相关资源
          最近更新 更多