J'utilise gdb pour déboguer un programme C++.
J'ai ce code:
int x = floor(sqrt(3));
et je veux voir la valeur de x. Cependant, gdb prétend que x est "<optimisé_out>". Comment puis-je voir la valeur de x? Dois-je changer mes drapeaux de compilateur?
Aux niveaux d'optimisation élevés, le compilateur peut éliminer les valeurs intermédiaires, comme vous l'avez vu ici. Il existe plusieurs options:
-O0
est certain de fonctionner (mais sera beaucoup plus lent), -O1
pourrait également fonctionner correctement.Si vous ne pouvez pas ou ne voulez pas désactiver l'optimisation, vous pouvez essayer de déclarer la variable comme volatile. C'est généralement suffisant pour que votre compilateur conserve la variable dans le code final.
Alternativement, dans les versions récentes de GCC, vous pouvez désactiver l'optimisation pour juste une fonction, comme ceci:
void my_function() __attribute__((optimize(0)))
{
int x = floor(sqrt(3));
}
Créez votre propre "variable globale" et imprimez la variable optimisée de sortie dans cette variable globale. Assurez-vous de supprimer ces globaux créés par vous après avoir terminé le débogage!