gdb:无法重新编译可执行文件:(未找到调试符号)

gdb: Cannot Recompile Executable: (no debugging symbols found)

我只能访问 C 可执行文件(没有源代码/.c 代码),我需要使用 gdb 对其进行调试。但是我不断收到一条(未找到调试符号)消息。我见过其他类似的问题,但大多数建议重新编译源代码(我不能这样做,因为我没有)或建议以下修复(见下文),这些对我没有用。

gdb test
Reading symbols from /usr/bin/test...(no debugging symbols found)...done.
(gdb) b main
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /usr/bin/test...(no debugging symbols found)...done.
(gdb) exec-file test
(gdb) file test
Reading symbols from /usr/bin/test...(no debugging symbols found)...done.
(gdb) b 2
No symbol table is loaded.  Use the "file" command.

附带说明一下,我不能在 main 处中断(奇怪,因为我可以保证这是一个 C 可执行文件)。

我刚开始使用 gdb,非常迷茫,非常感谢任何帮助。非常感谢!

编辑:

按照@Jean-François Fabre 的建议,我已将可执行文件名称更改为 foobar,但我仍然 运行 遇到同样的问题。上面的输出已更新:

gdb foobar
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done.
(gdb) b main
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file foobar
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done.
(gdb) exec-file foobar
(gdb) file foobar
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done.
(gdb) b 2
No symbol table is loaded.  Use the "file" command.

But I keep getting a (no debugging symbols found) message.

此消息表示您的 executable 没有调试信息。

I cannot break at main (strange because I can guarantee this is a C executable).

这可能意味着您的 executable 已被完全剥离(其符号 table 已被删除;符号 table 有助于调试,但在运行时完全没有必要)。

I need to use gdb to debug it.

这很好:您仍然可以调试此 executable,但只能在汇编级别。如果没有符号 table,您将只能在单个指令地址上设置断点,而不能在任何函数上设置断点。

如果您的 executable 是动态链接的,您应该仍然可以在外部函数上设置断点,例如 printfmalloc(如果您的 executable 打电话给他们)。

编译代码时不要忘记添加-g。例如:

g++ main.cpp -o main -g
gcc main.c -o main -g