2010-06-06 7 views
7

Lors du débogage d'un projet C++ non géré dans Visual Studio 2008, je souhaite parfois voir la valeur d'une variable globale. Nous n'en avons pas beaucoup mais ceux qui sont là sont tous déclarés dans un espace de noms appelé 'global'. par exemple.Affichage des variables globales avec espace de noms dans le débogueur Visual Studio?

namespace global 
{ 
    int foo; 
    bool bar; 

    ... 
} 

Le problème est que lorsque le code est arrêté à un point d'arrêt, l'info-bulle de débogage par défaut (de pointage au nom de la variable) et Espion (Maj-f9 sur le nom de la variable) ne prennent pas l'espace de noms dans considération et ne fonctionnera donc pas. Par exemple, je peux pointer sur 'foo' et rien ne se présente. Si je change-f9 sur foo, cela affichera le quickwatch, qui indiquera alors 'CXX0017: Erreur: symbole "foo" non trouvé'. Je peux contourner cela en éditant manuellement le nom de la variable dans la fenêtre quickwatch pour le préfixer avec "global ::" (ce qui est fastidieux étant donné que vous devez le faire chaque fois que vous voulez accélérer), mais il n'y a pas de solution pour l'info-bulle que je peux travailler. La définition de l'espace de nom par défaut des propriétés du projet n'aide pas.

Comment puis-je dire au débogueur VS d'utiliser l'espace de noms dans lequel il sait déjà que la variable est déclarée (puisqu'il possède la déclaration), ou lui indiquer un espace de noms par défaut pour rechercher des variables ne les trouve pas?

Mon google-fu n'a pas trouvé de réponse. listes This report le même problème, avec MS en disant qu'il est « par la conception », mais même si j'espère qu'il ya un moyen de contourner le problème (peut-être avec l'utilisation intelligente de autoexp.dat?)

+1

Vous avez de la chance que votre espace de noms a un nom. Si les variables sont dans un espace de noms sans nom, il est même impossible de voir leur valeur dans le débogueur (voir http://stackoverflow.com/questions/1334989/debugging-data-in-anynomous-namespaces-c). – Patrick

Répondre

1

En utilisant le nom complet, y compris la namespace dans la source l'a résolu pour moi.

.: écrire par exemple

global::bar = (global::foo==0) 

au lieu de

bar = (foo==0) 
Questions connexes