2010-09-24 8 views
6

Sto cercando di eseguire il debug di un file core generato da un binario C++ senza simboli di debug. Per fare il debug efficace, ho bisogno dei simboli di debug, quindi ho ricompilato lo stesso codice con l'opzione -g per generare i simboli di debug nel binario ricompilato. Posso ora eseguire il debug dello stesso file core generato dal primo file binario (senza simboli di debug) usando il secondo binario (ha i simboli di debug, tutto il resto è lo stesso)?Posso eseguire il debug di un core generato da un binario C++ senza eseguire il debug dei simboli utilizzando lo stesso binario ricompilato con i simboli di debug

Grazie mille!

risposta

5

Se è stato compilato l'eseguibile originale con ad es. g++ -O2 ..., non è possibile (come probabilmente hai scoperto) utilizzare un nuovo eseguibile creato con g++ -g ... per eseguire il debug di core - Il GDB richiede che i simboli corrispondano e non lo farebbero (a causa della differenza nei livelli di ottimizzazione).

Che cosa si può fare è costruire il nuovo eseguibile con lo stesso ottimizzazione come l'originale, ma anche con i simboli di debug: g++ -O2 -g ....

Dopo aver creato un nuovo eseguibile, eseguire nm old.a.out > old.nm, nm new.a.out > new.nm e confrontare le uscite. Dovrebbero essere identici o molto molto vicini.

In tal caso, è possibile eseguire il debug di uno core prodotto da old.a.out utilizzando new.a.out.

In futuro, si dovrebbe sempre costruire il vostro eseguibile con simboli di debug, quindi tenere la copia completa, ma spedire una copia senza informazioni di debug:

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 
Problemi correlati