我正在爲Qt類創建一個natvis文件,並且遇到了問題。Visual Studio 2012 Natvis skip IndexListItems
爲了形象化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。
我有我的散列容器完全相同的問題。我還發現我投了這個功能請求:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3712689-implement-the-features-missing-in-natvis-that-auto – JCash
! = e需要有一個.gt作爲* – cmd
檢查[此鏈接](http://blogs.msdn。COM/B/vcblog /存檔/ 2013/06/28 /使用視覺工作室2013到寫維護本地-可視化-natvis.aspx)。可能會幫助你... –