即使使用-g标志进行编译,gdb中也没有调试符号

时间:2010-12-31 06:10:20

标签: c++ gcc makefile gdb debug-symbols

我正在尝试使用调试符号编译我的程序,以便在gdb中使用。我已经将-g标志添加到我的makefile中,但是当我在gdb中加载程序时,我仍然得到“从...中读取符号(没有找到调试符号)”。有什么不对?

这是我的makefile的一个精简示例,它应该包含相关的位:

CPP = g++
CFLAGS = -c -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) <test.cpp> -o <test.o>

如果你想看到整个事情,你可以去这里,虽然我不认为这是必要的:

http://pastebin.com/vGNjy0ga

杂项说明..我在Windows上使用MinGW进行编译,我将SFML和OpenGL作为依赖项。

不,在我的makefile中找不到-s标志。

6 个答案:

答案 0 :(得分:5)

稀释。我非常抱歉。事实证明我的makefile中的“clean:”部分已被破坏。因此当我使用make clean时没有任何事情发生。手动删除.o文件修复了问题。旗帜现在完美运作。感谢所有发布的人!现在可以删除它。

答案 1 :(得分:4)

使用我在某些旧F77代码上继承的makefile时遇到了同样的问题。我尝试了人们推荐的所有标志(-g -ggdb ......等) 解决方案是 make clean 如果您没有或知道它意味着什么,基本上删除所有已编译的(.o)文件。

makefile不知道重新编译,因为只更改了标志,所以当我想到的时候,我实际上并没有使用-g或-ggdb进行编译。希望这有助于某人!

答案 2 :(得分:1)

尝试替换

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)

(编辑) 注意:-c选项不适用于可执行文件

答案 3 :(得分:0)

我不确定,但我认为即使在链接时你也需要-g。

答案 4 :(得分:0)

我对Mingw没有太多经验,但尝试用-ggdb替换-g。这可以解决您的问题。根据gcc手册页

  

生成调试信息以供使用   由GDB。这意味着使用最多   表达格式(DWARF 2,   stabs,如果两者都不是本机格式   其中包括GDB   如果可能的话扩展。

答案 5 :(得分:0)

我认为在将对象链接到二进制代码时需要-g

CPP = g++
CFLAGS = -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) $(OBJ) -o $(BIN) $(LDFLAGS) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) -c <test.cpp> -o <test.o>