(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 ? ?
(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 ? ?
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).
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.
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 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.