你很可能需要知道这个调试小技巧

栏目: IT技术 · 发布时间: 5年前

内容简介:最近在调试的时候,需要观察第三方容器中每一个元素的值。默认情况下,为了更直观的感受这种便利,我特意截图对比了三种常用的观察变量的方法。1、通过

最近在调试的时候,需要观察第三方容器中每一个元素的值。默认情况下, vs 并不知道如何显示第三方容器的内容,我只能手动观察容器中的每一个值, 超级 不方便。我找到一个超级给力的好办法,你还有其它好办法吗?

为了更直观的感受这种便利,我特意截图对比了三种常用的观察变量的方法。

直接观察

1、通过 vs 的悬浮提示观察。

小贴士:把鼠标移动到对应的变量即可。

你很可能需要知道这个调试小技巧

可以发现,现在 vs 并不知道如何解析 pts 的内容,只能 “傻傻” 的显示出 bvector 中的三个成员。

2、通过 watch 窗口观察。

小贴士:可以使用快捷键 ctrl + alt + w, 1 来打开第一个 watch 窗口。据我观察,最多支持 4watch 窗口。

你很可能需要知道这个调试小技巧

可以发现,我们可以在代码中使用的 at(index)[index] 已经失效了,只能使用蹩脚的 (pts._C_alloc)._C_begin + index 来观察对应的变量(反人类,有木有)。

3、通过 quick watch 窗口观察。

小贴士:可以选中要观察的变量,然后按快捷键 shift + f9 打开快速监视窗口。

你很可能需要知道这个调试小技巧

同样,没什么用。

难道只能这么 低效 吗? vs2012 之前是的,但是事情从 vs2012 发生了变化。从 vs2012 开始引入了 natvis 机制来观察变量,超级方便。话不多说,开启 natvis 后再使用上面的三种方法观察同样的变量。

开启 natvis

1、通过 vs 的悬浮提示观察。

你很可能需要知道这个调试小技巧

2、通过 watch 窗口观察。

你很可能需要知道这个调试小技巧

3、通过 quick watch 窗口观察。

你很可能需要知道这个调试小技巧

有木有很方便?要是有 128 个,或者 1024 个元素,是不是可以节省很多时间?

如何开启

可以自己编写 .natvis 文件并放到指定目录下,重启 vs 后即可加载。请原谅我比较懒,直接从官方文档上摘录了一段,更多内容可以参考文末给出的参考链接。

搜索位置及顺序转载如下

If multiple valid entries are encountered for the same type, the first one in the following list will be used:

  • PDB
  • Project/solution
  • User directory: %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers
  • Install directory: %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers

我放到了 %USERPROFILE%\My Documents\Visual Studio 2013\Visualizers 下。

你很可能需要知道这个调试小技巧

提示

在高版本的 vs 中( vs2017/vs2019vs2015 没亲自确认),可以动态修改对应的 natvis 文件内容,但是 vs2012/vs2013 并不支持动态修改。

排错

如果 natvis 加载有问题,可以通过设置注册表 开启诊断信息

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Debugger]
"EnableNatvisDiagnostics"=dword:00000001

windbg 中的 natvis

windbg 中也可以使用 dx 命令来进行一些高级查看(超级超级厉害的 dx 命令),具体参考 defrag tools 上的视频。

最后,附上文中用到的 natvis 文件,大家可以做个参考。

示例

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <!--from bvector -->
  <Type Name="Bentley::Bstdcxx::bvector<*>">  
  <DisplayString>{{size = {_C_alloc._C_end - _C_alloc._C_begin}}}</DisplayString>  
  <Expand>  
    <Item Name="[size]">_C_alloc._C_end - _C_alloc._C_begin</Item>  
    <Item Name="[capacity]">(_C_alloc._C_bufend - _C_alloc._C_begin)</Item>  
    <ArrayItems>  
      <Size>_C_alloc._C_end - _C_alloc._C_begin</Size>  
      <ValuePointer>_C_alloc._C_begin</ValuePointer>  
    </ArrayItems>  
  </Expand>  
  </Type>
</AutoVisualizer>

以上所述就是小编给大家介绍的《你很可能需要知道这个调试小技巧》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络营销

网络营销

拉菲·默罕默德 / 王刊良 / 中国财政经济出版社 / 2004-10 / 65.00元

本书提供了一个将网络营销与传统营销进行整合的分析和设计框架,称之为“市场空间矩阵”,该框架贯穿本书。利用该框架可以对网络营销战略、营销手段等进行系统的分析、设计和评价。 本书还有一条脉络,即客户关系的四个阶段,这一线索是市场空间矩阵的一个维度。在客户关系的框架下对营销手段(产品、价格、渠道、促销、社区、传播、品牌)进行分析和设计,旨在将客户从认知阶段经过探索/扩展阶段快速推进到承诺阶段。 ......一起来看看 《网络营销》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具