c语言 - Gdb 重复"no symbol table is loaded"



好吧,尽管尝试了很多解决方案,但我还是无法让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:[行号]这个东西。

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

(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变量来更改传递给编译器的命令行参数。预处理指令和include目录通常通过扩充CPPFLAGS变量来传递(特定于C++的标志从CXXFLAGS读取,但CPPFLAGS选项同时传递给C和C++编译器)。

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

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

最新更新