GDB 未找到符号 table

GDB not finding symbol table

我无法确定 gdb 没有找到正确的调试符号或它们不是由我的 makefile 生成的原因。我已经添加和删除了各种标志,例如 -g、-ggdb 和 -O0,组合方式尽可能多。如有任何帮助,我们将不胜感激!

生成文件:

FLAGS =-std=c++11 -ggdb -g -O0 -Wall -Werror
CC = g++
OBJS = main.o LSorter.o LNode.o

default: exec

exec: $(OBJS)
    $(CC) $(FLAGS) -o exec $(OBJS) 

main: main.cpp LSorter.h LNode.h
    $(CC) $(FLAGS) -c main.cpp -o main.o

LSorter: LSorter.cpp LSorter.h LNode.h
    $(CC) $(FLAGS) -c LSorter.cpp -o LSorter.o

LNode: LNode.cpp  LNode.h
    $(CC) $(FLAGS) -c LNode.cpp -o LNode.o

clean:
    rm exec $(OBJS)

控制台输出:

OBJS = main.o LSorter.o LNode.o

exec: $(OBJS)
    $(CC) $(FLAGS) -o exec $(OBJS) 

这指定 exec 目标依赖于 main.oLSorter.oLNode.o 目标。

make 命令然后继续搜索您的 Makefile 以寻找任何构建 main.oLsorter.oLNode.o.

的规则

不幸的是,make 在这项崇高的任务中惨遭失败。您的 Makefile 未能为名为 main.oLsorter.oLNode.o 的目标定义任何规则。 make 然后默认使用其隐式规则,即从 .cpp 找到的同名文件构建 .o 文件。 make 中内置的默认 built-in 规则对您的 FLAGS 变量一无所知,如果您在编译时密切注意 make 正在执行的命令你的 cpp 文件你会注意到你的 cpp 文件不是用你的 FLAGS 编译的,因此没有编译任何调试数据。

您的 makefile 似乎确实为目标 mainLSorterLNode 定义了规则,这些规则使用 FLAGS 来指定 -g 选项。

不幸的是,正如我所解释的,这些不是 make 被指示搜索的目标。

这是一个明显的疏忽。更改构建规则以指定正确的依赖项目标,然后 make clean 并重新编译。