【发布时间】:2012-11-24 18:04:34
【问题描述】:
我正在为 Qt 类创建一个 natvis 文件,但遇到了问题。
为了可视化 QHash 对象,我创建了这两种类型:
<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>
它几乎可以工作,但是由于 QHash 在内存中不是连续的,所以有很多无效条目。 条件
reinterpret_cast<QHashNode<
$T1,$T2> *>(d->buckets[$i]) != e
已经过滤掉那些无效的,但它们仍然显示为<Unable to display value>。
有谁知道是否有办法完全跳过这些条目?
我从来没有真正使用过 autoexp.dat 文件,这是旧方法,但是在查看安装了 Qt 插件的文件时,在我看来,声明
#switch ($e.next != 0) #case 1 (
$e
)
确实如此,所以我希望在 natvis 文件中也有办法做到这一点?
如果有人有兴趣,我可以给你 natvis 文件,但我现在只有 QString、QByteArray、QList、QVector、QMap 和(有问题的)QHash。
【问题讨论】:
-
我的哈希容器遇到了完全相同的问题。我还发现了我投票支持的这个功能请求:visualstudio.uservoice.com/forums/121579-visual-studio/…
-
! = e 需要有一个.gt *
-
检查this link。可能对你有帮助...
标签: c++ qt visual-studio-2012