查找当前在GDB中调试的可执行文件的源代码路径

查找当前在GDB中调试的可执行文件的源代码路径,gdb,Gdb,我可以在main中设置断点并用正确的源代码调试代码,但我不知道GDB从哪里获取源代码 源代码不在(当前工作目录)中 如何找到GDB从哪个位置获取代码?您可以使用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. Comp

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

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


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

您可以使用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“show directories”命令查看源搜索路径。

使用

(gdb) show directories
如果您不知道这些目录设置在哪里,请检查.gdbinit文件,查看是否有类似的语句

directory /path/to/source

另请参见。

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

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

这并不意味着源代码被编译成二进制文件。但这意味着保留对原始源代码的引用。我已经在我的系统上试过了,它可以工作。gdb在哪里存储这个源代码位置?是否在可执行文件本身中?在使用调试信息构建的可执行文件本身中。如果GDB已经在可执行文件中存储了信息,为什么它还需要源代码?可以在编译和调试之间移动目录session@ernesto我认为它只存储一条到行号映射(行表)的指令,不是实际的源代码。例如,
strings a.out
不显示源代码。