source_file.c是否有必要出现在我们尝试为source_file.c的可执行文件执行gdb的目录中?



我正在尝试gdb 来获取 source_file.c的最终可执行文件,即"list"命令。

它没有按我的预期工作,因为我只有一个可执行文件,而不是在该目录中source_file.c。这是预期的行为吗?

场景如下:

(gdb) b main
(gdb) list
1   source_file.c: No such file or directory.
in source_file.c

那么,是否有必要在该 pwd 中具有source_file.c,以尝试启动 gdb 以执行source_file.c

为调试而编译的二进制文件添加了其他信息以帮助调试器。这包括每个指令和符号的文件名和行号。但它不包括源代码。

如果要进行源代码级调试,则必须具有源文件,但它不必位于同一目录中。您可以使用"目录some_dir_name"命令指定包含源文件的目录。

如果没有源文件,调试器仍然是一个有用的工具。您仍然可以做几乎所有事情。您可以设置断点、反汇编代码、检查内存等。但它不会在您这样做时向您显示代码或变量名称。一个不起作用的命令是"列表"。等效的程序集是"反汇编"。

有几个正当理由可以在没有源文件的情况下进行调试。我花时间在一个表面上只有一个程序集调试器的操作系统上工作。但我可以访问源头来指导我的道路。但在当今世界,它通常更容易避免。

GDB 还支持远程调试。这将允许您在具有代码的计算机上运行 gdb。

如前所述,文档有一个很好的描述:https://www.sourceware.org/gdb/current/onlinedocs/gdb/Source-Path.html

最新更新