Visual Studio 2012 Natvis跳过IndexListItems

brx*_*brx 49 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={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>
Run Code Online (Sandbox Code Playgroud)

它几乎可以工作,但由于QHash在内存中不连续,因此存在大量无效条目.条件

reinterpret_cast&lt;QHashNode&lt;
$T1,$T2&gt; *&gt;(d->buckets[$i]) != e 
Run Code Online (Sandbox Code Playgroud)

已经过滤掉那些无效的,但它们仍然显示为<Unable to display value>.

有谁知道是否有办法完全跳过这些条目?

我从来没有真正使用过autoexp.dat文件,这是旧方法,但是在查看安装了Qt-plugin的文件时,我认为该语句

#switch ($e.next != 0) #case 1 (
    $e
)
Run Code Online (Sandbox Code Playgroud)

确切地说,所以我希望有可能在natvis文件中做到这一点吗?

如果有人感兴趣,我可以给你natvis文件,但我到目前为止只有QString,QByteArray,QList,QVector,QMap和(有问题的)QHash.

pla*_*ler 0

在我看来,只是 html 标签。

将其替换为 '<' , '>'

更多信息,请参见此处