2011-03-31 20 views
45
(gdb) n 
134 a = b = c = 0xdeadbeef + ((uint32_t)length) + initval; 
(gdb) n 
(gdb) p a 
$30 = <value optimized out> 
(gdb) p b 
$31 = <value optimized out> 
(gdb) p c 
$32 = 3735928563 

In che modo gdb può ottimizzare il mio valore ??Cosa significa <valore ottimizzato fuori> in gdb?

+1

possibile duplicato di [comportamento gdb: valore ottimizzato out] (http://stackoverflow.com/questions/1345338/gdb-behavior-value-optimized-out) – user

+0

Come trovare i valori: https: // stackoverflow. it/questions/9123676/how-do-i-view-the-value-of-an-optim-out-variable-in-c –

risposta

37

Significa che è stato compilato ad es. gcc -O3 e l'ottimizzatore di gcc hanno rilevato che alcune delle variabili erano ridondanti in un modo che consentiva loro di essere ottimizzate. In questo caso particolare, sembra che ci siano tre variabili a, b, c con lo stesso valore e presumibilmente possono essere tutte allineate a una singola variabile. Compila con l'ottimizzazione disattivata, ad es. gcc -O0, se si desidera vedere tali variabili (generalmente è una buona idea per le build di debug in ogni caso).

+0

Ma qui 'a' non è ridondante, deve essere usato successivamente .. '177 \t caso 3: a + = k [0] e 0xffffff; break; ' – gdb

+1

È necessario pubblicare tutto il codice pertinente se si desidera un'ulteriore analisi. –

+0

Ma il valore in qualche modo è tornato ad un certo punto ... come funziona questo tipo di magia ?? – gdb

3

Non ha funzionato. Il tuo compilatore ha fatto, ma c'è ancora un simbolo di debug per il nome della variabile originale.

3

Da https://idlebox.net/2010/apidocs/gdb-7.0.zip/gdb_9.html

I valori di argomenti che non sono stati salvati nei loro stack frame sono mostrati come `valore ottimizzato out'.

Im ipotesi di compilare con -O (somevalue) e accedere alle variabili a, b, c in una funzione in cui si è verificata l'ottimizzazione.

0

Basta eseguire "export COPTS = '- g -O0';" e ricostruisci il tuo codice. Dopo la ricostruzione, esegui il debug usando gdb. Non vedrai questo errore. Grazie.