2012-12-06 30 views
49

Qtクラス用のnatvisファイルを作成していて、問題が発生しました。それはかなりの作品Visual Studio 2012 Natvis skip IndexListItems

<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> 

が、QHashがメモリに連続していないので、無効なエントリがたくさんあります:

はQHashオブジェクトを可視化するために、私はこれらの2つのタイプを作成しました。 条件

reinterpret_cast&lt;QHashNode&lt; 
$T1,$T2&gt; *&gt;(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しか持っていません。

+0

私のハッシュコンテナと全く同じ問題があります。私はまた、私が投票したこの機能要求を発見しました:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3712689-implement-the-features-missing-in-natvis-that-auto – JCash

+0

! = eには* – cmd

+0

の.gtが必要です。[このリンク](http://blogs.msdn。com/b/vcblog/archive/2013/06/28/use-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx)をご覧ください。それはあなたを助けるかもしれません... –

答えて

2

を参照して、 '<'、 '>'

より多くの情報に置き換えます

IndexListItems拡張

ArrayItemsは配列要素が配置されていると仮定します想像上の記憶にある。デバッガは、現在の要素へのポインタをインクリメントするだけで、次の要素に到達します。値ノードへのインデックスを操作する必要がある場合をサポートするために、インデックスリスト項目を使用できます。 'IndexListItems'ノードを使用するビジュアライザは次のとおりです:[....] ArrayItemsとIndexListItemsの唯一の違いは、 'ValueNode'は暗黙の '$ i'パラメータを持つi番目の要素への完全な式を期待していることです。

また、the Qt Labs VSTools repositoryits documentationを指摘してもいいですか?特にtools/Qt4EEAddin/qt5.natvisは、私があなたが書こうとしていると思うもののように見えますか? (どちらかというと実際にはあなたは何を書いているのですか?^ _ ^)いずれにしても、あなたができることはqt5.natvisにあり、<DisplayString>の空きはQHashNodesですが、空のバケツを溶かしませんQHash

+0

この回答/ステートメントは非常に間違っています。ドキュメントには、 "が連続してメモリ内に配置されている"と記載されていますが、は連続してレイアウトされていません。 IndexListItemsはインデックス付けを使用する方法として提供されていますが、ArrayItemsはインデックス付けを使用しません。私はナトスのヘルプを検索するときに他人が誤解を受けないようにコメントしています。 – KymikoLoco

関連する問題