2011-01-14 15 views
11

¿Alguien experimenta mezclando -g (símbolos de depuración) y -O2 (mejor optimización segura) con el compilador gcc?
Tengo que depurar los bloqueos de un programa de lanzamiento distribuido a los usuarios finales que podrían enviarme el archivo principal.
Siempre he usado para llamar:Uso de las opciones -g y -O2 en gcc

GDB < < miprograma >> < < archivo central >>

y ver dónde está el problema. Ahora puedo ver el rastro de llamadas pero no tengo símbolos de depuración. Estoy bastante en problemas.

¿Alguna idea?

Respuesta

6

Usamos ambos juntos en el entorno de producción, lo que hace que la depuración sea mucho más fácil si el cliente solo ha visto un bloqueo una vez. Te da una idea bastante buena de dónde está el problema (no si fue una corrupción de memoria).

En teoría, agregar -g no debería afectar el rendimiento, aunque el ejecutable se vuelve grande. En el entorno integrado es una gran compensación.

+5

La imagen con los símbolos solo es necesaria para el depurador. Si está utilizando un depurador remoto o depurando post-mortem desde un archivo central, la imagen que se ejecuta en el destino puede tener los símbolos eliminados. –

10

Funciona bien.

O bien, debido a la optimización a veces la fuente que está pasando con el depurador no coincide exactamente con la fuente, pero en mi humilde opinión a pesar de tener los símbolos de depuración hace que la depuración sea mucho más fácil.

+4

Además, a veces las líneas fuente se ejecutan fuera de servicio, lo que me confundió al principio. – mkb

+0

Estoy acostumbrado a este código de versión de VC de depuración de comportamientos. Estaba vagando si el código está optimizado de todos modos, incluso si declaro -g ... –

+4

'-g' no tiene ningún impacto en el código, solo en los datos de depuración adicionales generados. –

Cuestiones relacionadas