Natvis文件实现VS2013调试可视化(Debugger Visualizers)

71 篇文章 18 订阅

1、natvis文件是干什么的?

微软提出使用一种.natvis的文件来定义一个类的对象在调试窗口时显示。

natvis的定义方式举例如下:

<Type Name="std::list&lt;*&gt;">
    <DisplayString>{{ size={_Mysize} }}</DisplayString>
    <Expand>
        <LinkedListItems>
            <Size>_Mysize</Size>
            <HeadPointer>_Myhead-&gt;_Next</HeadPointer>
            <NextPointer>_Next</NextPointer>
            <ValueNode>_Myval</ValueNode>
        </LinkedListItems>
    </Expand>
</Type>

摘录于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\stl.natvis

2、vector等STL容器看不到?

VS2013断点调试时,vector<string> item_vec;查看一下item_vec中的内容时,watch中的内容如下:

vector对象为什么没有显示size, capacity, vector中的所有元素列表等等?

原因有几种可能:

(1)Natvis文本本身有语法错误

(2)VS调试器的版本问题,低版本解析不出高版本的Natvis文件

(3)VS发布的更新程序有bug,stl.natvis文件中的一些定义通不过验证

例如,本人遇到的vector问题就是版本不匹配造成,VS2013和VS2015在C++ STL定义不同:

  <!-- VC 2013 -->
  <Type Name="std::vector&lt;*&gt;">
      <DisplayString>{{ size={_Mylast - _Myfirst} }}</DisplayString>
      <Expand>
          <Item Name="[capacity]" ExcludeView="simple">_Myend - _Myfirst</Item>
          <ArrayItems>
              <Size>_Mylast - _Myfirst</Size>
              <ValuePointer>_Myfirst</ValuePointer>
          </ArrayItems>
      </Expand>
  </Type>

  <!-- VC 2015 -->
  <Type Name="std::vector&lt;*&gt;">
      <DisplayString>{{ size={_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst} }}</DisplayString>
      <Expand>
          <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst</Item>
          <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item>
          <ArrayItems>
              <Size>_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Size>
              <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer>
          </ArrayItems>
      </Expand>
  </Type>

3、自定义Natvis文件(例如Qt定义的qt5.natvis)

把自定义文件Natvis存放在如下位置,Visual Studio就能找到,每次修改之后不需要重启Visual Studio,只需要重新运行一次Debug就行了。

%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers
%USERPROFILE%\My Documents\Visual Studio 2013\Visualizers\
如果发现没有起作用,可以在注册表中加入如下的键值,这样在Visual Studio的Output窗口就可以看到加载Natvis时的信息了。

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Debugger]
"EnableNatvisDiagnostics"=REG_DWORD:0x00000001

以上工作完毕,调试的时候,在Visual Studio中输出窗口可以看到如下文本显示:

Natvis: 正在分析 natvis xml 文件:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\atlmfc.natvis。
Natvis: natvis xml 文件分析完毕:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\atlmfc.natvis。
Natvis: 正在分析 natvis xml 文件:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\concurrency.natvis。
Natvis: natvis xml 文件分析完毕:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\concurrency.natvis。
Natvis: 正在分析 natvis xml 文件:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\cpp_rest.natvis。
Natvis: natvis xml 文件分析完毕:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\cpp_rest.natvis。
Natvis: 正在分析 natvis xml 文件:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\stl.natvis。
Natvis: natvis xml 文件分析完毕:  C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\stl.natvis。

......

4、微软官网文档:

创建自定义视图的C++在调试器中的对象

https://docs.microsoft.com/zh-cn/visualstudio/debugger/create-custom-views-of-native-objects

 

---

参考文献

VS调试STL问题总结

用Natvis定制C++对象在Visual Studio调试时如何显示

 

opencvsharp.debuggervisualizers-v4.7-vs2022是一个用于在Visual Studio 2022中调试OpenCvSharp库的工具集。OpenCvSharp是一个基于OpenCV(开放源代码计算机视觉库)的C#包装库,它使开发人员能够在C#应用程序中使用OpenCV的功能。 opencvsharp.debuggervisualizers-v4.7-vs2022的主要作用是帮助开发人员更轻松地调试使用OpenCvSharp库的应用程序。它通过为调试器提供额外的可视化工具和功能,简化了调试过程。例如,它可以让开发人员查看OpenCvSharp库中的对象和数据结构的内部状态,更直观地理解代码的执行过程和数据处理流程。这种工具在调试复杂的图像处理或计算机视觉算法时尤为有用,因为它可以帮助开发人员更好地理解和调试代码,提高开发效率和代码质量。 此外,opencvsharp.debuggervisualizers-v4.7-vs2022还可以与Visual Studio 2022集成,与其他调试工具配合使用,使开发人员能够更全面地分析和调试他们的应用程序。通过该工具集,开发人员可以更方便地观察和理解OpenCvSharp库中的各种数据结构,以及它们在代码执行过程中的变化和影响,从而更有效地识别和解决问题。 总之,opencvsharp.debuggervisualizers-v4.7-vs2022是一个便于在Visual Studio 2022中调试OpenCvSharp库的工具集,它能够提供更直观的调试体验,并帮助开发人员更快速、更高效地开发和调试与图像处理和计算机视觉相关的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值