2011-03-31 25 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 

¿Cómo puede optimizar gdb mi valor?¿Qué significa <value optimised out> en gdb?

+1

posible duplicado de [comportamiento de gdb: valor optimizado] (http://stackoverflow.com/questions/1345338/gdb-behavior-value-optimized-out) – user

+0

Cómo encontrar los valores: https: // stackoverflow. com/questions/9123676/how-do-i-view-the-value-of-an-optimized-out-variable-in-c –

Respuesta

37

Significa que compiló con p. Ej. gcc -O3 y el optimizador de gcc encontraron que algunas de sus variables eran redundantes de alguna manera que les permitía optimizarlas. En este caso particular, parece que tiene tres variables a, b, c con el mismo valor y, presumiblemente, todas pueden ser aliassed a una sola variable. Compilar con optimización desactivada, p. gcc -O0, si desea ver tales variables (en general, esta es una buena idea para compilaciones de depuración).

+0

Pero aquí el 'a' no es redundante, necesita ser utilizado más adelante .. '177 \t caso 3: a + = k [0] & 0xffffff; break; ' – gdb

+1

Deberá publicar todo el código relevante si desea un análisis posterior. –

+0

Pero el valor de alguna manera regresó en cierto punto ... ¿Cómo funciona este tipo de magia? – gdb

3

No lo hizo. Su compilador sí lo hizo, pero todavía hay un símbolo de depuración para el nombre de la variable original.

3

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

Los valores de argumentos que no se guardaron en sus marcos de pila se muestran como `valor optimizado a cabo'.

Supongo que compiló con -O (algún valor) y está accediendo a las variables a, b, c en una función donde se ha producido la optimización.

0

Simplemente ejecute "export COPTS = '- g -O0';" y reconstruye tu código Después de la reconstrucción, depúrela usando gdb. No verá ese error. Gracias.