C++ Visual Studio 2012 Natvis skip索引项
我正在为Qt类创建一个natvis文件,但遇到了一个问题 为了可视化QHash对象,我创建了以下两种类型:C++ Visual Studio 2012 Natvis skip索引项,c++,qt,visual-studio-2012,C++,Qt,Visual Studio 2012,我正在为Qt类创建一个natvis文件,但遇到了一个问题 为了可视化QHash对象,我创建了以下两种类型: <Type Name="QHashNode<*,*>"> <DisplayString Condition="next->next == 0">{{ key={key} value={value} h={h}}}</DisplayString> <DisplayString>{{ key={k
<Type Name="QHashNode<*,*>">
<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<QHashNode<$T1,$T2> *>(next)</Item>
</Expand>
</Type>
<Type Name="QHash<*,*>">
<DisplayString>{{ size={d->size} buckets={d->numBuckets} }}</DisplayString>
<Expand>
<IndexListItems>
<Size>d->numBuckets</Size>
<ValueNode Condition="reinterpret_cast<QHashNode<$T1,$T2> *>(d->buckets[$i]) != e">reinterpret_cast<QHashNode<$T1,$T2> *>(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
)