gdb:“未加载任何符号表”


90

尝试在gdb中添加断点时,我不断收到此错误消息。

我使用以下命令进行编译:

gcc -g main.c utmpib2.c -o main.o
and:
cc -g main.c utmpib2.c -o main.o
and also:
g++ -g main.c utmpib2.c -o main.o

我也尝试使用“ -ggdb”而不是“ -g”,但仍然收到该错误消息。

然后执行gdb:

$gdb

在gdb中:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.

哦,我是说main.o。我更新了。我也尝试使用“ -ggdb”,它仍然给我同样的问题。
user994165 '02

告诉我们您如何调用gcc和gdb。复制粘贴以避免任何错误。
Piotr Praszmo '02

1
我更新了命令。这真的很奇怪。它刚刚开始工作。我以前知道我正在使用“ gdb a.out”访问gdb,并且收到关于a.out不存在或类似问题的错误消息。然后我切换到“ exec文件”。现在,我尝试使用a.out,它显示“此GDB被配置为“ i486-linux-gnu””,并且可以设置断点。
user994165

哦,我指定的文件错误是a.out。我遵循了gdb教程,但没有考虑将文件名更改为自己的文件名。
user994165

Answers:


58

首先,您拥有的是完全编译的程序,而不是目标文件,因此删除.o扩展名。现在,请注意错误消息中所说的内容,它确切地告诉您如何解决问题:“未加载符号表。请使用“文件”命令。”

(gdb) exec-file test
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

或者只是在命令行上传递程序。

$ gdb test
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

抱歉,我是gdb菜鸟。该解决方案(以及该问题的其他解决方案均不适用)与Windows上WSL上的gdb一起使用,您对我有什么建议吗?
aderchox

139

您必须添加额外的参数-g,它会生成源级别的调试信息。它看起来像:

gcc -g prog.c

之后,您可以以通用方式使用gdb。


25
就我而言,这个答案为我解决了问题,而被接受的答案没有任何区别。
弗兰克斯特2014年

8

我有同样的问题,我按照这篇文章发表,它解决了我的问题。

请遵循以下两个步骤:

  1. 确保优化级别为 -O0
  2. -ggdb编译程序时添加标志

祝好运!


0

每当gcc编译机和gdb 测试机上的版本不同时,您都可能会遇到debuginfo格式不兼容的问题

要解决此问题,请尝试将debuginfo格式降级:

gcc -gdwarf-3 ...
gcc -gdwarf-2 ...
gcc -gstabs ...
gcc -gstabs+ ...
gcc -gcoff ...
gcc -gxcoff ...
gcc -gxcoff+ ...

或匹配gdbgcc你使用。


0

今天早上我遇到了这个问题,因为我在不同的OS中使用了相同的可执行文件:在gcc -ggdb -Wall test.c -o testMac(10.15.2)中使用编译程序后,我gdb在VirtualBox中的Ubuntu(16.04)中运行了可执行文件。

修复:在Ubuntu下用相同的命令重新编译,那么你应该很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.