【问题标题】:How can Visual Studio 2015 Natvis display a function static variable?Visual Studio 2015 Natvis 如何显示函数静态变量?
【发布时间】:2016-07-28 15:44:55
【问题描述】:

我正在使用 Microsoft 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 的一个实例上时,我想查看向量的大小,但我不知道如何引用它(或者是否可能)。这是可视化器类型,&lt;what goes here?&gt; 在我遇到问题的地方:

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

实际的问题要复杂得多,涉及到奇怪地重复出现的模板模式来创建更好的枚举对象,所以请不要对这个有点做作的场景的无用提出意见。

【问题讨论】:

  • 您是否要求语法来引用具有函数范围的静态对象,或者如何获取std::vector 的大小,因为您无法调用size() 成员?
  • @IInspectable 我正在尝试引用具有函数范围的静态对象。我知道如何获得尺寸。

标签: c++ visual-studio static visual-studio-2015 natvis


【解决方案1】:

如果您可以让您的监视窗口在函数之外声明静态函数变量值,那么您可以使用它。但是,AFAIK,仅允许在函数范围内访问静态函数变量。当您不在函数内时,由于没有指向该对象的符号路径,因此您是 SOL。

解决方法是将静态变量移动到类范围,然后有一个变量的符号路径,您可以从那里访问它。

【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多