2010-02-11 9 views
7

Mi chiedevo se posso ottenere un elenco di opzioni gcc che possono causare il comportamento strano di gdb.Opzione GCC che può causare problemi durante il debug con GDB

Ovviamente, sappiamo tutti che utilizzare le opzioni di ottimizzazione (-O3 per esempio) causa un comportamento strano in gdb, ma quali sono le altre opzioni che possono avere un simile impatto?

(Attualmente sto cercando di eseguire un decoder MPEG2 in gdb e ottengo strano comportamento anche dopo aver rimosso flag di ottimizzazione ...)

+0

Descrivi strano. Hai aggiunto -ggdb? E la cosa più importante: scrivi quali opzioni usi ancora. – ebo

+0

Utilizzati solo -g e -g3. Il comportamento strano nel mio caso è qualcosa del genere: una definizione di funzione inizia alla riga 654, 'n' quindi salta alla riga 765, un altro 'n' torna alla riga 654 e così via per 4 o 5 volte, ovviamente, linea 765 non è quello che dovrebbe essere il prossimo ... Ma anche se sto cercando la bandiera che causa questo problema adesso, sono curioso di diverse opzioni che possono causare strani comportamenti in generale. – claf

+0

Per l'opzione che sto ancora usando, c'è molto silenzio, non li ho postati nella mia domanda e invece sono più generici. – claf

risposta

9

Penso che sia difficile dire quali flag si should't utilizzare quando si chiama gcc per il debug. Il gcc docs nota che i flag di debug predefiniti sono -g e -O2 e che utilizza -g -O0 -fno-inline disabilita qualsiasi ottimizzazione e funzione di inlining.

A mio parere, se si vuole veramente garantire che nulla possa compromettere il processo di debug, è sufficiente compilare con le flag -g -O0 -fno-inline.

+0

cosa succede se hai allo stesso tempo -O3 flag, qualche altro flag e "-g -O0 -fno-inline"? – user65636

+0

Ho creato un programma semplice e uso -O3 -g -O0 -fno-inline -S e ho avuto lo stesso risultato di -g -O0 -fno-inline -S. Ma con -g -O0 -fno-inline -O3 -S l'output era diverso, in questo caso il codice assembly con -O3 era più grande del codice generato senza -O3. Non conosco ancora le implicazioni di questo risultato. – coelhudo

+2

Nessuna sorpresa, -O0 sovrascrive l'-O3 nel primo caso. La pagina di manuale di gcc dice: "Se usi più opzioni -O, con o senza numeri di livello, l'ultima opzione è quella che è efficace." – bug313

0

Come indicato nel GCC documentation, si dovrebbe usare -og:

-og

esperienza Ottimizzare il debug. -Og consente ottimizzazioni che non interferiscono con il debug. Dovrebbe essere il livello di ottimizzazione della scelta per il ciclo standard edit-compile-debug, offrendo un ragionevole livello di ottimizzazione mantenendo una veloce compilazione e una buona esperienza di debug.

Descrive inoltre ogni flag di ottimizzazione e come potrebbe influire sul debug.

+1

In linea di principio si, in pratica '-O0' potrebbe essere preferibile –

Problemi correlati