2009-06-01 8 views
1

Je suis en train de déboguer une partie d'un grand projet dans Visual Studio 2005 et de passer le code ligne par ligne.Assignations échouant

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

Après avoir quitté passé la première ligne, values.speed a une valeur de 61, mais pour une raison quelconque, la vitesse est se voit attribuer la valeur 58. Après la deuxième ligne, values.ref_speed a une valeur de 58, mais ref reçoit la valeur 30.

En pause, vous pouvez voir que les valeurs d'origine sont en fait 61 et 58 respectivement, mais les valeurs stockées sont différentes.

Quel est l'origine de ce problème?

+2

Est-ce une application multithread? – Robert

+0

Que diriez-vous de poster du code pour les valeurs? – JeffH

+0

Oui. Cependant, cet emplacement particulier n'est écrit qu'une seule fois. –

Répondre

6

Cela peut se produire si la définition de la structure de valeurs a été modifiée dans un fichier d'en-tête et que tous les fichiers objet n'ont pas été recompilés. Alors la "carte" de la structure que votre code utilise dans ce fichier pourrait ne pas correspondre au reste du code. Cela pourrait expliquer pourquoi l'une des variables semble avoir la valeur de l'autre.

Ou le fichier .pdb Visual Studio n'a pas été mis à jour pour une raison quelconque, et Visual Studio recherche à l'ancienne place pour la variable.

+0

Je voudrais m'assurer que vos informations de débogage sont correctement synchronisées avec votre projet. J'ai eu des problèmes avant où les valeurs n'étaient pas alignées en raison des versions plus anciennes d'informations de débogage en cours de chargement. –

+0

Ou si la structure a été définie comme deux choses différentes dans deux endroits différents. Je n'ai aucune idée de comment il a réussi à compiler, mais la structure a été définie deux fois à deux endroits - avec les ordres des variables permutées. Merci! –

0

Est-ce que vous faites cela en mode de débogage ou de libération? Si vous le faites en mode édition, ou avec optimisation, le compilateur peut avoir réorganisé les choses pour améliorer les performances, ce qui peut donner des résultats bizarres. Cela ne signifie pas que quelque chose ne va pas dans l'exécution réelle, mais il peut être déroutant de passer à travers.

+0

Cela se produit en mode débogage. –

1

Fou. Y a-t-il une chance que vous ayez une variable locale du même type que cette-> valeurs dont le nom est aussi des valeurs (ce qui expliquerait pourquoi vous référencez un membre via this->)?

+0

Aucune variable locale. J'ai utilisé ceci pour clarifier que ce n'est pas une variable locale dans une très longue routine show(). –

Questions connexes