103 votes

Que <value optimized out> signifie gdb ?

(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

Comment gdb peut-il optimiser ma valeur ? ?

104voto

Paul R Points 104036

Cela signifie que vous avez compilé avec, par exemple, gcc -O3 et que l'optimiseur gcc a trouvé que certaines de vos variables étaient redondantes d'une manière qui leur a permis d'être optimisées. Dans ce cas particulier, vous semblez avoir trois variables a, b, c avec la même valeur et probablement elles peuvent toutes être aliassées à une seule variable. Compilez avec l'optimisation désactivée, par exemple gcc -O0, si vous voulez voir de telles variables (c'est généralement une bonne idée pour les builds de débogage dans tous les cas).

6voto

Votre compilateur l'a fait, mais il y a toujours un symbole de débogage pour le nom de la variable d'origine.

5voto

Angelom Points 1099

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

Les valeurs des arguments qui n'ont pas été sauvegardés dans leurs trames de pile sont affichées comme `value optimized out'.

Je suppose que vous avez compilé avec -O(somevalue) et accédez aux variables a,b,c dans une fonction où l'optimisation a eu lieu.

2voto

amolgautam Points 527

Vous devez désactiver l'optimisation du compilateur.

Si vous êtes intéressé par une variable particulière dans gdb, vous pouvez la supprimer comme "volatile" et recompiler le code. Cela fera en sorte que le compilateur désactive l'optimisation du compilateur pour cette variable.

quantité volatile int = 0 ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X