2016-04-07 42 views
6

Sto scrivendo visualizzatori di debugger usando un file .natvis in Microsoft Visual Studio 2015. C'è un pezzo di informazione nella mia classe che mi piacerebbe ottenere, se possibile. Mi sto chiedendo quale sarebbe la sintassi per ottenere quella variabile.Come può Visual Studio 2015 Natvis visualizzare una variabile statica di funzione?

Ecco una versione semplificata del codice C++:

class MyClass 
{ 
public: 

    MyClass() {} 

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

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

     return numberVector[i]; 
    } 
} 

Nel debugger, vorrei vedere la dimensione del vettore, quando mi passa il mouse sopra un'istanza di MyClass, ma non so come fare riferimento (o se è addirittura possibile). Ecco il tipo di visualizzatore, con <what goes here?> nel luogo in cui sto avendo problemi:

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

Il problema reale è molto più complicato, che coinvolge il motivo template curiosamente ricorrenti per creare migliori oggetti di enumerazione, quindi per favore non commenti su l'inutilità di questo scenario un po 'inventato.

+0

Si sta richiedendo la sintassi per fare riferimento a un oggetto statico con scope funzione, o come ottenere una dimensione 'std :: vector', dal momento che non è possibile richiamare il membro' size() '? – IInspectable

+0

@IInspectable Sto provando a fare riferimento a un oggetto statico con ambito di funzione. So come ottenere la taglia. – Ben

risposta

0

Se è possibile ottenere che la finestra di visualizzazione indichi il valore della variabile di funzione statica all'esterno della funzione, è possibile utilizzarlo. Tuttavia, AFAIK, l'accesso a una funzione statica è consentito solo all'interno dell'ambito della funzione. Poiché non vi è alcun percorso simbolico per quell'oggetto quando non ci si trova all'interno della funzione, sei SOL.

Una soluzione alternativa consiste nel spostare la variabile statica nello scope della classe, quindi esiste un percorso simbolico per la variabile e da esso è possibile accedervi.