调试时将鼠标悬停在 Visual Studio 中的 operator->() 之后查看字段

mouse-over to peek a field after operator->() in Visual Studio while debugging

我有一个小 class:-

class A{   public:int aField;   }

下面,在调试时,如果我将鼠标悬停在 a->aField 中的 aField 附近,Visual Studio 会很好地弹出该字段的值(就像一个小手表)。

A* a=new A();
a->aField=1234;   
    //^ hover here

然后我升级了代码来覆盖operator->:-

class APtr{ //my custom smart pointer
    A* ptr;
    A* operator->(){ return ptr; }
}

APtr a; 
.....
a->aField=1234;
   //^ hover here

没有弹出窗口了。 (有 a 的弹出窗口,但 aField 没有)
如何让可爱弹窗再次出现?

编辑(赏金原因): "user1610015" 提供了一个可行的解决方案,但我认为可能有更方便的解决方案(只有一点点帮助)。一个新的解决方案甚至可以建议我使用一些插件或其他 IDE。

编辑 2:
这是我想要的可爱弹出窗口的示例。
它不适用于 operator-> 之后的字段。

调试器无法识别运算符->,但您可以通过将鼠标悬停在智能指针变量上然后单击工具提示上的向右箭头来获取相同的信息:

natvis 可视化工具正是这种情况!幸运的是,您使用的是完全支持的 VS2015。

以你为例

class APtr
{
public:
    APtr(A* a_Pointer)
    {
        ptr = a_Pointer;
    }

    A* operator->()
    {
        return ptr;
    }

private:
    A* ptr;
};

您需要创建一个扩展名为 .natvis 的文件,例如 APtr.natvis,内容如下:

<?xml version="1.0" encoding="utf-8"?>

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="APtr">
      <SmartPointer Usage="Minimal">ptr</SmartPointer>
  </Type>
</AutoVisualizer>

然后您只需将此文件添加到您的项目中,就像任何其他 .cpp 文件一样,然后开始调试!

为了编写更复杂的内容,我强烈建议在 C:\Program Files (x86)\Microsoft Visual Studio 14.0 中查找内置的 *.natvis 文件并将其用作示例。