C++ Visual Studio 2012 Natvis skip索引项

C++ Visual Studio 2012 Natvis skip索引项,c++,qt,visual-studio-2012,C++,Qt,Visual Studio 2012,我正在为Qt类创建一个natvis文件,但遇到了一个问题 为了可视化QHash对象,我创建了以下两种类型: <Type Name="QHashNode&lt;*,*&gt;"> <DisplayString Condition="next->next == 0">{{ key={key} value={value} h={h}}}</DisplayString> <DisplayString>{{ key={k

我正在为Qt类创建一个natvis文件,但遇到了一个问题

为了可视化QHash对象,我创建了以下两种类型:

<Type Name="QHashNode&lt;*,*&gt;">
    <DisplayString Condition="next->next == 0">{{ key={key} value={value} h={h}}}</DisplayString>
    <DisplayString>{{ key={key} value={value} h={h} withCollision }}</DisplayString>
    <Expand>
        <Item Name="NextNode">reinterpret_cast&lt;QHashNode&lt;$T1,$T2&gt; *&gt;(next)</Item>
    </Expand>
</Type>

<Type Name="QHash&lt;*,*&gt;">
    <DisplayString>{{ size={d->size} buckets={d->numBuckets} }}</DisplayString>
    <Expand>
        <IndexListItems>
            <Size>d->numBuckets</Size>
            <ValueNode Condition="reinterpret_cast&lt;QHashNode&lt;$T1,$T2&gt; *&gt;(d->buckets[$i]) != e">reinterpret_cast&lt;QHashNode&lt;$T1,$T2&gt; *&gt;(d->buckets[$i])</ValueNode>
        </IndexListItems>
    </Expand>
</Type>
已筛选出无效的,但仍显示为

有人知道是否有办法完全跳过这些条目吗

我从来没有真正使用过autoexp.dat文件,这是一种老方法,但是当我查看安装了Qt插件的文件时,我觉得

#switch ($e.next != 0) #case 1 (
    $e
)
确实如此,所以我希望在natvis文件中也有这样做的方法


如果有人感兴趣,我可以给你natvis文件,但我现在只有QString、QByteArray、QList、QVector、QMap和(有问题的)QHash。

在我看来,只有html标记

将其替换为“”

有关更多信息,请参见根据定义的“按定义是连续的”:

索引项扩展

ArrayItems假定数组元素在内存中连续排列。调试器通过简单地增加其指向当前元素的指针来访问下一个元素。为了支持需要将索引操作到值节点的情况,可以使用索引列表项。这是一个使用“IndexListItems”节点的可视化工具:[……]ArrayItems和IndexListItems之间的唯一区别是“ValueNode”希望完整表达式包含隐式“$i”参数的第i个元素


还有,我可以指给你看和吗?尤其是
tools/Qt4EEAddin/qt5.natvis
看起来非常像我认为你想要写的东西?(或者它实际上是你正在写的?^ ^)不管怎样,我认为你能做的最好的事情就是
qt5.natvis
,它有一个特殊的
,用于空
QHashNodes
,但不尝试删除
QHash
中的空桶。我的hash容器也有同样的问题。我还发现了我投票支持的这个功能请求:!=e需要有一个.gt用于*检查。也许这对你有帮助……这个答案/陈述非常不正确。文档中说“在内存中是连续排列的”,而不是连续排列的。IndexListItems是作为一种使用索引的方式提供的,而ArrayItems则不是。我这样评论是为了让其他人在寻找natvis帮助时不会被误导。
#switch ($e.next != 0) #case 1 (
    $e
)