web-dev-qa-db-fra.com

Que signifie <valeur optimisée> dans 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 optimiser ma valeur ??

52
gdb

Cela signifie que vous avez compilé avec par exemple gcc -O3 et l'optimiseur gcc ont constaté que certaines de vos variables étaient redondantes, ce qui leur permettait d'être optimisées. Dans ce cas particulier, vous semblez avoir trois variables a, b, c avec la même valeur et vraisemblablement toutes peuvent être associées à une seule variable. Compiler avec 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 versions de débogage).

45
Paul R

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

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 cadres de pile sont affichées en tant que «valeur optimisée en sortie».

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

3
Angelom

Il suffit de lancer "export COPTS = '- g -O0';" et reconstruisez votre code. Après la reconstruction, corrigez-le à l’aide de gdb. Vous ne verrez pas une telle erreur. Merci.

0
Bimal Jha