Visual studio 2015 natvis:我可以在CustomListItems中有一个自定义的复杂项吗? < C++中,我有一个整数数组,我想可视化,元素是这样的: [0] <range 1 start, e.g. 1253> [1] <range 1 end, e.g. 1320> [2] <range 2 start, e.g. 1852> [3] <range 2 end, e.g. 2528> ... [n] 0 [0] [1] [2] [3] ... [n] 0

Visual studio 2015 natvis:我可以在CustomListItems中有一个自定义的复杂项吗? < C++中,我有一个整数数组,我想可视化,元素是这样的: [0] <range 1 start, e.g. 1253> [1] <range 1 end, e.g. 1320> [2] <range 2 start, e.g. 1852> [3] <range 2 end, e.g. 2528> ... [n] 0 [0] [1] [2] [3] ... [n] 0,visual-studio-2015,visual-studio-2017,natvis,Visual Studio 2015,Visual Studio 2017,Natvis,因此,我希望将其可视化,使其具有自定义表示,其中每个可视化项都类似于[0][1]等 目前,我有以下情况(没有给我期望的结果): *pCurRange *(pCurRange+1) pCurRange+=2 ++我 但我希望每个项目都是这样的(在DisplayString语法中): {*pCurRange}-{*(pCurRange+1)} 由于item元素的内容不能是这个,所以我似乎无法做到这一点。此外,我没有看到在可视化工具中定义字符串(或字符数组)变量并在Item元素之前构造它的方法-

因此,我希望将其可视化,使其具有自定义表示,其中每个可视化项都类似于
[0]
<代码>[1]等

目前,我有以下情况(没有给我期望的结果):


*pCurRange
*(pCurRange+1)
pCurRange+=2
++我
但我希望每个项目都是这样的(在DisplayString语法中):

{*pCurRange}-{*(pCurRange+1)}
由于item元素的内容不能是这个,所以我似乎无法做到这一点。此外,我没有看到在可视化工具中定义字符串(或字符数组)变量并在Item元素之前构造它的方法-最重要的是,可视化工具没有可用的字符串修饰符。在项的Name属性中执行它不是一个选项,因为我需要在Value列中使用它

这可以通过某种方式实现吗


编辑:是对实现我想要的视图所需的内容的请求。

我认为在natvis中没有直接的方法可以做到这一点。但是为什么不修改代码以更好地适应数据结构呢?先申报

struct范围{
int开始;
内端;
}
然后让
m_pWhichRanges
指向一个
范围
,而不是
int
(或者更好地将其设置为
std::vector
std::array
gsl::span
)。如果这是不可能的,那么请确保代码中的任何地方都使用了
struct Range
,以便调试器看到该类型。例如,添加

Range*as_ranges(){return reinterpret_cast(m_pWhichRanges);}
到您的结构/类

既然您有了
Range
类型,您就可以将
mpwhichranges
显示为
Range
s的自定义列表,并让每个
Range
神奇地显示自己


普库朗格,北美
++pCurRange
++我
请注意,我在
pCurRange
项中添加了
,na
,因此不显示地址

没有必要这样做,但如果你想,你现在可以微调范围显示到例如


{begin,d},{end,d}
>但是为什么不更改代码以更好地适应数据结构呢?1.因为不是所有的代码都是我的。2.因为不是每个结构都能满足所有需求;-)
<CustomListItems>
  <Variable Name='pCurRange' InitialValue='m_pWhichRanges'/>
  <Variable Name='i' InitialValue='0'/>
  <Loop Condition='*pCurRange'>
    <Item Name='[{i,d}] begin'>*pCurRange</Item>
    <Item Name='[{i,d}] end'>*(pCurRange+1)</Item>
    <Exec>pCurRange+=2</Exec>
    <Exec>++i</Exec>
  </Loop>
</CustomListItems>
<Item>{*pCurRange} - {*(pCurRange+1)}</Item>