2010-12-31 11 views
7

Estoy intentando compilar mi programa con símbolos de depuración para usar en gdb. He agregado el indicador -g a mi archivo MAKE, pero sigo recibiendo "Lectura de símbolos de ... (no se encontraron símbolos de depuración)" cuando cargo el programa en gdb. ¿¿Qué está mal??No hay símbolos de depuración en gdb incluso cuando se compila con la bandera -g

que aquí hay una simplificada ejemplo de mi makefile que deben tener los bits relevantes:

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> 

Si desea ver toda la cosa puede ir aquí en vez, aunque no lo hago pensar es necesario:

http://pastebin.com/vGNjy0ga

notas diversas .. estoy compilando con MinGW en Windows y tengo SFML y OpenGL como dependencias.

Y no, la bandera -s no se encuentra en mi archivo MAKE.

+5

¿Puedes confirmar con 'make -n' que de hecho estás obteniendo el indicador' -g' en tu línea de compilación? – 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 No está allí ! Extraño .. Y mis banderas -ansi y -pendantic se han ido también. Edit: Lo siento por el muro de texto. No me di cuenta de que iba a ser así. – delaccount992

+3

la salida que Kobie pegó es para el objetivo predeterminado, que es para vincular, y no hay ninguna bandera -g ahí. Acabo de confirmar en Ubuntu que ese indicador no es necesario durante la vinculación solo en tiempo de compilación. Creo que debería intentar "make -n test.o" para ver qué comando se utiliza para compilar. – binW

Respuesta

0

No estoy seguro, pero creo que usted necesita -g incluso mientras realiza la vinculación.

+0

Sin dados. No funcionó Gracias por intentarlo. – delaccount992

1

tratar de sustituir

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

con

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

(editar) Nota: La opción -c no funcionará con ejecutable

+0

Eso no va a funcionar, porque el ejecutable final no puede usar '-c'. Además, parece (de una prueba rápida en g ++ 4.4.1 en GNU/Linux) que no necesita '-g' al enlazar. –

+0

Malo, sí, tiene razón, las opciones -c no funcionarán con el ejecutable – Alam

0

no tengo mucha experiencia con Mingw pero intente reemplazar -g con -ggdb. Esto puede resolver su problema. De acuerdo con la página de manual de gcc

Produce la información de depuración para el uso por GDB. Esto significa usar el formato expresivo más disponible (DWARF 2, apuñalamientos, o el formato nativo si ninguno de ellos es compatible con ), incluidas las extensiones GDB si es posible.

+0

En mi manual (GNU/Linux g ++), '-g' dice que" GDB puede trabajar con esta información de depuración ". –

+0

DWARF 2 se usa principalmente para obtener el valor de MACROS mientras depura – Alam

4

Ahh. Lo siento mucho. Resulta que la parte "limpia:" de mi archivo MAKE está rota. Por lo tanto, cuando utilicé hacer limpieza, no pasó nada. Eliminar los archivos .o solucionó el problema de forma manual. Las banderas funcionan perfectamente ahora. ¡Gracias a todos los que publicaron de todos modos! Esto se puede eliminar ahora.

+0

Y, aunque parezca raro, make -n muestra que mi indicador -g ha sido eliminado, en realidad no lo ha hecho. – delaccount992

+1

binW tiene un comentario anterior que su 'make -n' solo muestra la parte de enlace, no la parte de compilación. Asegúrese de estar viendo 'make -n test.o' solamente. – chrisaycock

0

Creo que necesita -g al vincular el objeto en un código 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

Tuve el mismo problema cuando uso un archivo MAKE que heredé en algún código F77 antiguo. Probé todas las banderas que la gente recomendaba (-g -ggdb ... etc.) la solución se ejecutó make clean Si no tiene eso o no sabe lo que significa, básicamente borre todos los compilados (.o) archivos.

el archivo MAKE no sabía recompilar ya que solo se cambiaron las banderas, así que no estaba realmente compilando con -g -ggdb cuando pensé que era así. ¡Espero que esto ayude a alguien!

Cuestiones relacionadas