use*_*234 5 c gdb symbols makefile
好吧,尽管我尝试了很多解决方案,但我还是无法让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...
Run Code Online (Sandbox Code Playgroud)
有谁能看到这个问题?我的程序被分成30个.c文件,所以我确实需要使用文件:[行号]的东西.
尽管您声称已经编译了cc -g可执行文件myfilesys,但 GDB 没有看到任何内容,正如您尝试使用 GDB 的file命令所证明的那样:
(gdb) file myfilesys
Reading symbols from /.../myfilesys...(no debugging symbols found)...done.
按照您的话来说,您实际上用于cc -g编译myfilesys,这意味着您已经从二进制文件中删除了符号(我发现这不太可能,但我提到了可能性),或者您的目标文件都没有调试符号。假设是后者,您需要将cc -g -c编译应用到每个单独的源文件。然后,每个生成的目标文件都将具有调试符号,并且生成的可执行文件也将具有调试符号(只要您在链接后不将它们删除)。
对于诸如 之类的标准 makefile gmake,通常可以通过使用 扩充CFLAGS变量来轻松实现这一点-g。下面是一个完整的 makefile,用三个源文件说明了这一点:
CFLAGS=-g
myfilesys: a.o b.o c.o
$(CC) $^ -o $@
Run Code Online (Sandbox Code Playgroud)
GCC 已经有隐式规则,知道如何.o从相应的.c文件创建文件。但是,您可以通过更改变量来更改传递给编译器的命令行参数CFLAGS。预处理指令和包含目录通常通过增加CPPFLAGS变量来传入(从 读取 C++ 特定标志CXXFLAGS,但CPPFLAGS选项会传递给 C 和 C++ 编译器)。
我们需要定义一个明确的规则来创建可执行文件myfilesys(该$(CC)规则用制表符缩进,这是 makefile 的要求)。输入 后make,可执行文件将包含符号,并且 GDB 不会报告可执行文件中缺少的符号(它可能会报告您使用的任何库中缺少的符号):
(gdb) file myfilesys
Reading symbols from /.../myfilesys...done.
| 归档时间: |
|
| 查看次数: |
13849 次 |
| 最近记录: |