Нет символов отладки в GDB даже при компиляции с флагом -g - PullRequest
11 голосов
/ 31 декабря 2010

Я пытаюсь скомпилировать мою программу с символами отладки для использования в GDB. Я добавил флаг -g в мой make-файл, но я все еще получаю «Чтение символов из ... (символы отладки не найдены)», когда я загружаю программу в gdb. Что не так ??

Вот урезанный пример моего make-файла, который должен иметь соответствующие биты:

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

Разные заметки. Я компилирую с MinGW в Windows, и у меня есть SFML и OpenGL в качестве зависимостей.

И нет, в моем make-файле нигде нет флага -s.

Ответы [ 6 ]

5 голосов
/ 31 декабря 2010

Ааа.Мне очень жаль.Оказывается, «чистый:» часть моего make-файла повреждена.Таким образом, когда я использовал make clean, ничего не произошло.Удаление файлов .o вручную решило проблему.Флаги теперь отлично работают.Спасибо всем, кто написал в любом случае!Это можно удалить сейчас.

4 голосов
/ 23 июля 2014

У меня была такая же проблема при использовании make-файла, который я унаследовал в каком-то старом коде F77.Я попробовал все флаги, которые люди рекомендуют (-g -ggdb ... и т. Д.), Решение было запущено make clean Если у вас его нет или вы не знаете, что это значит, в основном удалите все скомпилированные (.o) files.

make-файл не знал, что перекомпилировать, так как были изменены только флаги, так что я на самом деле не компилировал с -g или -ggdb, когда думал, что это так.Надеюсь, это кому-нибудь поможет!

1 голос
/ 31 декабря 2010

попробуй заменить

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

с

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

(редактировать) Примечание: опция -c не будет работать с исполняемым файлом

0 голосов
/ 31 декабря 2010

Я думаю, вам нужно -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>
0 голосов
/ 31 декабря 2010

У меня нет большого опыта работы с Mingw, но попробуйте заменить -g на -ggdb.Это может решить вашу проблему.Согласно справочной странице gcc

Создание отладочной информации для использования GDB.Это означает использовать наиболее выразительный доступный формат (DWARF 2, колбы или собственный формат, если ни один из них не поддерживается), включая расширения GDB, если это возможно.

0 голосов
/ 31 декабря 2010

Я не уверен, но я думаю, что вам нужно -g даже при линковке.

...