2016-04-07 3 views
6

J'écris des visualiseurs de débogueur en utilisant un fichier .natvis dans Microsoft Visual Studio 2015. Il y a une information dans ma classe que je voudrais obtenir si possible. Je me demande quelle serait la syntaxe pour obtenir cette variable.Comment Visual Studio 2015 Natvis peut-il afficher une variable statique de fonction?

Voici une version simplifiée du code C++:

class MyClass 
{ 
public: 

    MyClass() {} 

    int getAValue(size_t index) 
    { 
     static std::vector<int> numberVector; 

     if (numberVector.size() <= index) 
     { 
      addSomeNumbersToTheEnd(numberVector); 
     } 

     return numberVector[i]; 
    } 
} 

Dans le débogueur, je voudrais voir la taille du vecteur quand je passe la souris sur une instance de MyClass, mais je ne sais pas comment le référencer (ou si c'est même possible). Voici le type de Visualizer, avec <what goes here?> à l'endroit où je vais avoir du mal:

<Type Name="MyClass"> 
    <DisplayString>[$(Type)] staticVectorSize={<what goes here?>}</DisplayString> 
</Type> 

Le problème réel est beaucoup plus compliquée, impliquant le modèle de modèle curieusement récurrent pour créer de meilleurs objets d'énumération, donc s'il vous plaît aucun commentaire sur l'inutilité de ce scénario un peu artificiel.

+0

Demandez-vous que la syntaxe fasse référence à un objet statique avec une portée de fonction, ou comment obtenir une taille de 'std :: vector', puisque vous ne pouvez pas appeler le membre' size() '? – IInspectable

+0

@IInspectable J'essaye de référencer un objet statique avec la portée de fonction. Je sais comment obtenir la taille. – Ben

Répondre

0

Si vous pouvez obtenir que la fenêtre de votre montre indique la valeur de la variable de fonction statique en dehors de la fonction, vous pouvez l'utiliser. Cependant, AFAIK, l'accès à une variable de fonction statique n'est autorisé qu'à l'intérieur de la portée de la fonction. Comme il n'y a pas de chemin de symbole vers cet objet lorsque vous n'êtes pas dans la fonction, vous êtes SOL. Une solution de contournement consiste à déplacer la variable statique vers la portée de classe, puis un chemin d'accès symbolique à la variable et vous pouvez y accéder à partir de là.