2009-04-18 8 views
3

Je ne sais pas comment expliquer le comportement que je vois, mais voilà.Optimisation du compilateur MS qui remplace les variables dans une fonction?

J'ai une fonction foo qui prend trois paramètres, un pointeur, un int, et un autre pointeur. Quand je casse à l'intérieur de foo, je peux clairement voir que toutes les variables sont les valeurs qu'elles devraient être. Cependant, lorsque je descends au-delà des déclarations de variables locales, l'un des paramètres (l'int) passe soudainement à zéro. Cependant, le reste de la fonction s'exécute comme s'il s'agissait de la valeur d'origine, donc tout va bien.

Cela ne se produit pas dans le débogage complet, mais se produit dans le débogage régulier. Est-ce une sorte d'optimisation? Si oui, comment s'appelle-t-il et où puis-je obtenir les détails?

Exemple:

void foo(void *A, int B, void *C) 
{ 
    // B == 5 
    int X = 3; 
    char *Y = getSomeStaticString(); 
    // ... some other variable declarations like the above 

    // B, according to the debugger, is now 0 
    if (B == 5) { 
    // But this still executes 
    } 
} 

Répondre

6

Vous débogage du code optimisé. Les variables locales ne peuvent pas être approuvées - le compilateur est libre de réutiliser son espace, de le mettre en cache dans un registre, etc. Ce que vous voyez probablement, c'est que B est mis en cache dans un registre et que son emplacement est réutilisé pour une autre variable.

Question similaire ici: Can optimizations affect the ability to debug a VC++ app using its PDB?

+0

Ça y était! Merci – Sydius

Questions connexes