Qtクラスのnatvisファイルを作成していますが、問題が発生しました。
QHashオブジェクトを視覚化するために、次の2つのタイプを作成しました。
<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しかありません。