2010-12-31 12 views
7

Sto provando a compilare il mio programma con i simboli di debug per l'uso in gdb. Ho aggiunto il flag -g al mio makefile ma ottengo ancora "Reading symbols from ... (no debugging symbols found)" quando carico il programma in gdb. Che c'è??Nessun simbolo di debug in gdb anche durante la compilazione con -g flag

Questo vuole essere un ridotta esempio del mio makefile che dovrebbe avere i bit rilevanti:

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> 

Se vuoi vedere l'intera cosa si può andare qui invece, anche se non lo faccio think è necessario:

http://pastebin.com/vGNjy0ga

Note varie .. sono compilazione con MinGW su Windows e non ho SFML e OpenGL come dipendenze.

E no, la bandiera -s non si trova da nessuna parte nel mio makefile.

+5

Puoi confermare con 'make -n' che stai effettivamente ottenendo il flag' -g' sulla tua riga di compilazione? – 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/world.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 Non è lì ! Strano ... E anche le mie bandiere -ansi e -pendant sono sparite. Modifica: scusa per il muro di testo. Non sapevo che sarebbe successo così. – delaccount992

+3

l'output che Kobie ha incollato è per la destinazione predefinita, che è per il collegamento, e non vi è alcun flag -g lì. Ho appena confermato su Ubuntu che quel flag non è necessario durante il collegamento solo al momento della compilazione. Penso che dovresti provare a "make -n test.o" per vedere quale comando viene usato per compilare. – binW

risposta

0

Non sono sicuro, ma penso che sia necessario -g anche durante il collegamento.

+0

Nessun dado. Non ha funzionato Grazie per aver provato. – delaccount992

1

provare a sostituire

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

con

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

(edit) Nota: opzione -c non funzionerà con eseguibile

+0

Non funzionerà, perché l'eseguibile finale non può usare '-c'. Inoltre, sembra (da un rapido test su g ++ 4.4.1 su GNU/Linux) che non è necessario '-g' durante il collegamento. –

+0

Il mio male, sì sei opzioni -c giusti non funzioneranno con eseguibile – Alam

0

Non ho molta esperienza con Mingw ma provare a sostituire -g con -ggdb. Questo potrebbe risolvere il tuo problema. Secondo gcc man pagina

Produce informazioni di debug per l'uso da GDB. Ciò significa che è possibile utilizzare il maggior numero di formati espressivi disponibili (DWARF 2, stab o il formato nativo se nessuno dei due è supportato), comprese le estensioni GDB se possibile.

+0

Sul mio (GNU/Linux g ++) manuale, regolare '-g' dice: "GDB può lavorare con queste informazioni di debug." –

+0

NANO 2 è principalmente utilizzato per ottenere il valore di macro durante il debug – Alam

4

Ahh. Mi dispiace molto. Si scopre che la parte "pulita:" del mio makefile è rotta. Quindi quando ho usato make clean non è successo niente. L'eliminazione dei file .o ha risolto il problema manualmente. Le bandiere funzionano perfettamente ora. Grazie a tutti quelli che hanno pubblicato comunque! Questo può essere cancellato ora.

+0

e stranamente anche se fare spettacoli -n che la mia bandiera -g è stato spogliato, in realtà non ha. – delaccount992

+1

binW ha un commento sopra che il tuo 'make -n' mostra solo la porzione di collegamento, non la porzione di compilazione. Assicurati di guardare solo a make -n test.o'. – chrisaycock

0

Penso che sia necessario -g quando si collega l'oggetto in un codice binario.

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> 
3

Ho avuto lo stesso problema quando utilizzo un makefile che ho ereditato su un vecchio codice F77. Ho provato tutte le bandiere raccomandano (-g -ggdb ... ecc.) la soluzione è stato eseguito make clean Se non si dispone di che o sapere che cosa significa, in pratica eliminare tutti i compilato (.o) File.

il makefile non sapeva ricompilare poiché solo le bandiere venivano cambiate, quindi non stavo effettivamente compilando con -g o -ggdb quando pensavo che fosse. Spero che questo aiuti qualcuno!

Problemi correlati