gdb myfilesys (gdb) brea-6ren">
gpt4 book ai didi

c - gdb 重复 "no symbol table is loaded"

转载 作者:太空狗 更新时间:2023-10-29 15:04:04 32 4
gpt4 key购买 nike

好吧,尽管尝试了很多解决方案,我还是无法让 gdb 工作。

我的 makefile 执行 cc -g _________ 并生成 myfilesys

>gdb myfilesys
(gdb) break my_linked_list.c:90
No symbol table is loaded, use the "file" command...
(gdb) file myfilesys
Reading symbols from /home/jsexton/Work/cs492/hw3/myfilesys...(no
debugging symbols found)...done.
(gdb) break my_linked_list.c:90
No symbol table is loaded, use the "file" command...

谁能看出问题所在?我的程序被分成大约 30 个 .c 文件,所以我确实需要使用 file:[line number] 东西。

最佳答案

尽管您声称在您的可执行文件 myfilesys 上使用 cc -g 进行了编译,但 GDB 没有看到任何内容,正如您尝试使用 GDB 的 文件所证明的那样 命令:

(gdb) file myfilesys
Reading symbols from /.../myfilesys...(no debugging symbols found)...done.

按照您的说法,您实际上已经使用 cc -g 来编译 myfilesys,这意味着您已经从二进制文件中删除了符号(我发现这个不太可能,但我提到了可能性),或者你的目标文件都没有调试符号。假设是后者,您需要将 cc -g -c 编译应用于每个单独的源文件。然后,每个生成的目标文件都将具有调试符号,生成的可执行文件也将具有调试符号(只要您在链接后不删除它们)。

使用标准的 makefile,例如 gmake,这通常可以通过使用 -g 增加 CFLAGS 变量来轻松实现。下面是一个完整的 makefile,用三个源文件说明了这一点:

CFLAGS=-g

myfilesys: a.o b.o c.o
$(CC) $^ -o $@

GCC 已经有了知道如何从相应的 .c 文件创建 .o 文件的隐式规则。但是,您可以通过更改 CFLAGS 变量来更改传递给编译器的命令行参数。预处理指令和包含目录通常通过增加 CPPFLAGS 变量传入(C++ 特定标志从 CXXFLAGS 读取,但 CPPFLAGS 选项是传递给 C 和 C++ 编译器)。

我们需要定义一个明确的规则来创建可执行文件 myfilesys($(CC) 规则用制表符缩进,这是 makefile 的要求)。输入 make 后,可执行文件将有符号,GDB 将不会报告您的可执行文件中缺少符号(它可能会报告您使用的任何库中缺少的符号):

(gdb) file myfilesys
Reading symbols from /.../myfilesys...done.

关于c - gdb 重复 "no symbol table is loaded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23207332/

32 4 0