2011-01-14 11 views
11

Qualcuno ha esperienza di mixare -g (simboli di debugging) e -O2 (ottimizzazione migliore) con il compilatore gcc?
Devo eseguire il debug degli arresti anomali di un programma di rilascio distribuito agli utenti finali che potrebbero inviarmi di nuovo il file principale.
Ho sempre usato per chiamare:Utilizzo delle opzioni -g e -O2 in gcc

gdb < < myprogram >> < < file core >>

e vedere dove il problema è. Ora posso solo vedere la traccia di chiamata ma senza simboli di debug sono abbastanza nei guai.

Qualche idea?

risposta

6

Usiamo entrambi insieme nell'ambiente di produzione, il che rende molto più facile il debug se il cliente ha visto un incidente solo una volta. Ti dà una buona idea di dove sia il problema (non se si trattasse di un danneggiamento della memoria).

In teoria l'aggiunta di -g non dovrebbe influire sulle prestazioni, sebbene l'eseguibile diventi grande. Nell'ambiente embedded è un grande compromesso.

+5

L'immagine con i simboli è necessaria solo per il debugger. Se si utilizza un debugger remoto o si esegue il debug post-mortem da un file principale, l'immagine in esecuzione sul target può essere rimossa dai simboli. –

10

Funziona perfettamente.

O, a causa dell'ottimizzazione, a volte la sorgente che si sta passando con il debugger non corrisponde esattamente alla sorgente, ma IMHO nonostante abbia i simboli di debug rende molto più facile il debug.

+4

Inoltre, a volte le righe di origine vengono eseguite in modo anomalo, cosa che inizialmente mi ha confuso. – mkb

+0

Sono abituato a questo comportamento debugging del codice di rilascio VC. Stavo solo vagando se il codice è ottimizzato lo stesso anche se dichiaro -g ... –

+4

'-g' non ha alcun impatto sul codice, solo su ulteriori dati di debug generati. –

Problemi correlati