2010-09-24 11 views
6

Estoy intentando depurar un archivo core generado por un C++ binaria sin símbolos de depuración. Para hacer una depuración efectiva, necesito los símbolos de depuración, así que recompuse el mismo código con la opción -g para generar símbolos de depuración en el binario recompilado. ¿Puedo ahora depurar el mismo archivo central generado por el primer binario (sin símbolos de depuración) utilizando el segundo binario (tiene símbolos de depuración, todo lo demás es lo mismo)?¿Puedo depurar un núcleo binario generado por un C++ y sin símbolos de depuración utilizando el mismo binario volver a compilar con símbolos de depuración

Gracias mucho!

Respuesta

5

Si ha compilado ejecutable original con, por ejemplo g++ -O2 ..., no puede (como probablemente haya descubierto) usar un nuevo ejecutable creado con g++ -g ... para depurar el core - GDB necesita los símbolos para que coincidan, y no lo harían (debido a la diferencia en los niveles de optimización).

Lo que puede hacer es construir el nuevo ejecutable con el mismo optimización como el original, pero también con símbolos de depuración: g++ -O2 -g ....

Después de haber creado un nuevo archivo ejecutable, ejecute nm old.a.out > old.nm, nm new.a.out > new.nm y compare las salidas. Deben ser idénticos o muy cercanos.

Si es así, usted debe ser capaz de depurar un core producido por old.a.out usando new.a.out.

En el futuro, siempre se debe construir su ejecutable con símbolos de depuración, a continuación, mantener la copia completa, pero enviará una copia sin información de depuración:

cp a.out a.out.debug 
strip --strip-debug a.out 
# a.out is now good to send to customers 
# keep a.out.debug for future debugging 
Cuestiones relacionadas