2016-04-07 2 views
6

Я пишу визуализаторы отладчика, используя файл .natvis в Microsoft Visual Studio 2015. В моем классе есть одна часть информации, которую я хотел бы получить, если это возможно. Мне интересно, какой синтаксис будет для этой переменной.Как Visual Studio 2015 Natvis отображает функцию статической переменной?

Вот упрощенная версия кода C++:

class MyClass 
{ 
public: 

    MyClass() {} 

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

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

     return numberVector[i]; 
    } 
} 

В отладчике, я хотел бы видеть размер вектора, когда я наведите курсор мыши на экземпляр MyClass, но я не знаю, как ссылаться на нее (или если это возможно). Вот тип визуализатора, с <what goes here?> в том месте, где у меня возникают проблемы:

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

актуальная проблема является гораздо более сложным, не предусматривающее с любопытством повторяющегося рисунка шаблона для создания более объектов перечисления, поэтому, пожалуйста, не комментариев по поводу бесполезность этого несколько надуманного сценария.

+0

Вы просите синтаксис ссылаться на статический объект с помощью области действия или как получить размер 'std :: vector', так как вы не можете вызвать член' size() '? – IInspectable

+0

@IInspectable Я пытаюсь ссылаться на статический объект с областью функции. Я знаю, как получить размер. – Ben

ответ

0

Если вы можете получить свое окно часов, чтобы указать значение переменной статической функции вне функции, вы можете использовать это. Тем не менее, AFAIK, доступ к статическим функциональным переменным разрешен только внутри области функций. Поскольку для этого объекта нет пути к символу, если вы не входите в эту функцию, вы являетесь SOL.

Обходной путь заключается в перемещении статической переменной в область класса, тогда есть символический путь к переменной, и вы можете получить к ней доступ оттуда.