Natvis Visualizer将成员指针类型查看为数组

时间:2019-07-15 13:32:00

标签: arrays pointers visual-studio-2015 natvis

在Visual Studio 2015监视窗口中,可以通过添加逗号和数组长度来将指针作为数组监视。 d,10将显示10个双* d元素。

是否可以创建一个Natvis类型条目,该条目基于间接次数(即)执行此操作。对于d,d *和d **以不同的方式? 通常这些甚至是某种类型的成员,例如struct s {double * d},但我想避免不得不为所有这些类型编写自定义可视化工具。

该问题已标记为VS2015,但欢迎使用vs2017或vs2019解决方案。

2 个答案:

答案 0 :(得分:1)

对不起,但是看来您无法轻松实现想要的目标。

<Type Name="double*"><Type Name="double**">添加到Natvis Visual Studio时会抱怨

  

Natvis:NatvisFile.natvis(xx,x):错误:原始类型'double **'不允许

因此,无需更改代码,您将需要为所有相关结构添加natvis。

但是在查看您的代码库时,我想将您指向CppCoreGuidelines,尤其是这些规则:

如果您的代码库将遵循这些规则,而不会进行数组到指针的衰减,则完整类型信息将在调试器中提供。

另一种方法可能是将double封装为强类型。请比较this blog post与Fluent {C ++}。但是,如果您没有要求double*double**的旧版API,这可能很容易起作用。

答案 1 :(得分:0)

在示例中您注意到,您有一个 $('.add-extra-email-button').click(function() { var newDiv = $('<div class="clone_edilen_email"></div>'); newDiv.html('<div class="form-group"><input type="email" class="form-control email-address" name="email[]" placeholder="E-Mail"></div>'); $('.clone').append(newDiv); }); 结构,因此可以为此类型创建S

natvis

示例结果: result

但是,正如@Werner Henze已经回答的那样,您无法为<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="S"> <Expand> <Item Name="v3">v3, [3]nag</Item> <CustomListItems> <Variable Name="i" InitialValue="0"/> <Loop> <Item Name="m3[{i}]">m3[i],[3]nag</Item> <Exec>++i</Exec> <If Condition="i&gt;=3"> <Break/> </If> </Loop> </CustomListItems> </Expand> </Type> </AutoVisualizer> 创建natvis