gdb:"没有加载符号表"

use*_*165 85 c gdb

尝试在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
Run Code Online (Sandbox Code Playgroud)

我也试过"-ggdb"而不是"-g",我仍然得到错误信息.

然后我执行gdb:

$gdb
Run Code Online (Sandbox Code Playgroud)

在gdb中:

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

kra*_*lex 126

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

gcc -g prog.c
Run Code Online (Sandbox Code Playgroud)

之后你可以用普通的方式使用gdb.

  • 就我而言,这个答案为我解决了问题,而接受的答案没有任何区别. (20认同)

Kev*_*vin 54

首先,你拥有的是一个完全编译的程序,而不是一个目标文件,所以删除.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) 
Run Code Online (Sandbox Code Playgroud)

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

$ 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) 
Run Code Online (Sandbox Code Playgroud)


Cha*_*how 8

我有同样的问题,我按照这个帖子,它解决了我的问题.

请遵循以下2个步骤:

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

祝好运!