我正在尝试使用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
那么,为了尝试为source_file.c
的可执行文件启动gdb,是否需要在该pwd中使用source_file.c
?
答案 0 :(得分:3)
为调试而编译的二进制文件添加了额外的信息以帮助调试器。这包括每个指令和符号的文件名和行号。但它不包括源代码。
如果您想要源级别调试,您必须拥有源文件,但它不必位于同一目录中。您可以使用"目录some_dir_name"指定包含源文件的目录。命令。
没有源文件,调试器仍然是一个有用的工具。你几乎可以做任何事情。您可以设置断点,反汇编代码,检查内存等。但它不会显示代码或变量名称。一个不起作用的命令是" list。"装配等效于"反汇编。"
有一些可能在没有源文件的情况下调试的正当理由。我花时间在一个表面上只有汇编调试器的操作系统上工作。但是我可以访问源代码来指导我的方式。但在今天的世界中,它通常更容易避免。
GDB还支持远程调试。这将允许您在具有代码的计算机上运行gdb。
如前所述,该文件有一个很好的描述:https://www.sourceware.org/gdb/current/onlinedocs/gdb/Source-Path.html