2010-12-31 3 views
7

Ich versuche mein Programm mit Debugging-Symbolen für den Einsatz in gdb zu kompilieren. Ich habe die Markierung -g zu meinem Makefile hinzugefügt, aber ich bekomme immer noch "Lesen von Symbolen aus ... (keine Debugging-Symbole gefunden)", wenn ich das Programm in gdb lade. Was ist falsch??Keine Debugging-Symbole in gdb, selbst wenn mit -g kompiliert wird

ist hier ein Beispiel meines Make-Datei abgespeckte, die die entsprechenden Bits haben sollte:

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> 

Wenn Sie das Ganze sehen möchten Sie hier stattdessen gehen kann, obwohl ich nicht denken tun ist es notwendig:

http://pastebin.com/vGNjy0ga

Verschiedene Hinweise .. ich bin mit MinGW unter Windows kompilieren und ich habe SFML und OpenGL als Abhängigkeiten.

Und nein, die Flagge -s ist nirgends in meinem Makefile zu finden.

+5

Können Sie mit 'make -n' bestätigen, dass Sie tatsächlich das' -g' Flag in Ihrer Kompilierzeile bekommen? – chrisaycock

+0

F: \ rowdump \ ROM \ ROMV> make -n g ++ -Wall src/obj/core.o src/obj/image.o src/obj/gnd.o src/obj/gat.o src/obj/welt.o src/obj/rsw.o src/obj/camera.o src/obj/rsm.o src/obj/main.o -o romv -Wl, - enable-auto-import, -subsystem, windows -lsfml-main -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lglu32 Es ist nicht da ! Seltsam. Und meine -ansi und -pendantische Flaggen sind auch weg. Edit: Sorry für die Wand des Textes. Hab nicht gemerkt, dass es so enden würde. – delaccount992

+3

Die Ausgabe, die Kobie eingefügt hat, ist für das Standardziel, das zum Verknüpfen dient, und dort ist kein Flag -g vorhanden. Ich habe gerade auf Ubuntu bestätigt, dass dieses Flag während der Verbindung nicht zur Kompilierzeit benötigt wird. Ich denke, Sie sollten "make -n test.o" ausprobieren, um zu sehen, welcher Befehl zum Kompilieren verwendet wird. – binW

Antwort

0

Ich bin mir nicht sicher, aber ich denke, Sie brauchen -g sogar während der Verknüpfung.

+0

Kein Würfel. Hat nicht funktioniert. Danke fürs ausprobieren. – delaccount992

1

try

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

mit

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

(edit) zu ersetzen Anmerkung: -c Option wird nicht funktionieren mit

ausführbaren
+0

Das wird nicht funktionieren, weil die endgültige ausführbare Datei '-c' nicht verwenden kann. Außerdem scheint es (von einem schnellen Test auf g ++ 4.4.1 auf GNU/Linux), dass Sie "-g" nicht benötigen, wenn Sie verbinden. –

+0

Mein Fehler, Ja, Sie haben Recht -c-Optionen funktionieren nicht mit der ausführbaren Datei – Alam

0

ich viel Erfahrung mit Mingw nicht, sondern versuchen, zu ersetzen -g mit -ggdb. Dies kann Ihr Problem lösen. Laut gcc man page

Produzieren Debugging-Informationen zur Verwendung von GDB. Dies bedeutet, dass das am häufigsten verwendete Ausdruckformat (DWARF 2, , oder das native Format, wenn davon nicht unterstützt werden), einschließlich GDB Erweiterungen, wenn überhaupt möglich, verwendet wird.

+0

In meinem (GNU/Linux g ++) Handbuch sagt reguläres '-g':" GDB kann mit diesen Debugging-Informationen arbeiten. " –

+0

DWARF 2 wird hauptsächlich verwendet, um den Wert von MAKROS während des Debuggens – Alam

4

Ahh. Es tut mir sehr leid. Es stellt sich heraus, dass der "clean:" Teil meines Makefiles defekt ist. Also als ich sauber gemacht habe, ist nichts passiert. Durch das manuelle Löschen der O-Dateien wurde das Problem behoben. Die Flaggen funktionieren jetzt perfekt. Danke an alle, die trotzdem gepostet haben! Dies kann jetzt gelöscht werden.

+0

zu erhalten. Und seltsamerweise macht make -n, dass mein -g Flag entfernt wurde, in Wirklichkeit hat es nicht. – delaccount992

+1

binW hat einen Kommentar darüber, dass Ihr 'make -n' nur den Linking-Bereich zeigt, nicht den Compiling-Bereich. Stellen Sie sicher, dass Sie nur 'make -n test.o' betrachten. – chrisaycock

0

Ich denke, Sie brauchen -g bei der Verknüpfung des Objekts in einen Binärcode.

3

Ich hatte das gleiche Problem bei der Verwendung eines Makefile ich geerbt auf einige alte F77-Code. Ich probierte alle Flaggen, die Leute empfehlen (-g -ggdb ... etc.) die Lösung wurde ausgeführt make clean Wenn Sie das nicht haben oder wissen, was es bedeutet, löschen Sie im Grunde alle kompilierten (.o) Dateien.

Das Makefile wusste nicht neu zu kompilieren, da nur Flags geändert wurden, also kompilierte ich nicht mit -g oder -ggdb, wenn ich dachte, dass es war. Hoffe das hilft jemandem!