Visual Studio中智能指针对象的自定义视图?

Posted

技术标签:

【中文标题】Visual Studio中智能指针对象的自定义视图?【英文标题】:Custom views of smart pointer objects in visual studio? 【发布时间】:2016-12-16 02:57:44 【问题描述】:

我需要为具有多个类层次结构的应用程序使用智能指针。调试代码时的一个困难是在 Visual Studio 2015 的监视窗口中查看智能指针(例如unique_ptr)。它总是同时显示[ptr][deleter][Raw View],而我最关心的是关于在扩展指针视图时快速查看[ptr] 的内容。有没有办法让调试更容易并自定义显示智能指针内容的视图,使其与 Visual Studio 2015 中的原始指针相同?我知道这应该可以通过使用适当的 NavisFile 来实现,但是我不知道应该如何修改以下 NavisFile 以显示 [ptr] 的内容?

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 

  <Type Name="std::unique_ptr&lt;*&gt;">
      <SmartPointer Usage="Minimal">_Mypair._Myval2</SmartPointer>
      <DisplayString Condition="_Mypair._Myval2 == 0">empty</DisplayString>
      <DisplayString Condition="_Mypair._Myval2 != 0">unique_ptr *_Mypair._Myval2</DisplayString>
      <Expand>
          <Item Condition="_Mypair._Myval2 != 0" Name="[ptr]">_Mypair._Myval2</Item>
      </Expand>
  </Type>


</AutoVisualizer> 

【问题讨论】:

【参考方案1】:

我不是专家,但您似乎可以简单地删除 &lt;Expand&gt; 节点,然后将第二个 &lt;DisplayString&gt; 更改为仅显示 _Mypair._Myval2,例如:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 

  <Type Name="std::unique_ptr&lt;*&gt;">
      <SmartPointer Usage="Minimal">_Mypair._Myval2</SmartPointer>
      <DisplayString Condition="_Mypair._Myval2 == 0">empty</DisplayString>
      <DisplayString Condition="_Mypair._Myval2 != 0">_Mypair._Myval2</DisplayString>
  </Type>


</AutoVisualizer>

【讨论】:

是的,正如你所说。非常感谢您的回答。

以上是关于Visual Studio中智能指针对象的自定义视图?的主要内容,如果未能解决你的问题,请参考以下文章

无论如何在 Visual Studio 智能感知中定义一个未定义的对象?

带有 Dojo/Dijit 的 Javascript 智能感知是 Visual Studio 2008

参数如何传递到 Visual Studio 的自定义构建工具中?

C ++在boost python中使用带有命名空间的自定义智能指针

无法添加自己的自定义 EFDataAcces 库 Visual Studio 2019

无法使用 Visual Studio Code 中的自定义库解析导入