2016-10-24 8 views
0

私はデバッグ中にVS2015の基本的なstd:文字列のまともなビューを持つことはできません。 https://msdn.microsoft.com/fr-fr/library/jj620914.aspx (つまり、デバッガタイプがネイティブモードに設定されていて、Use Managed Compatibility ModeUse Native Compatibility Modeの両方のチェックを外してください)このアドレスで指定された手順に従ってください。私はまた、私のソリューションにstl.nativsファイルを追加しました。私は私の変数str(代わりに、非常に複雑な木の)ために、直接「テスト」を値として見たい enter image description herenatvisで簡単なstd :: stringを視覚化するには?

現在、私のデバッガは次のようになります。これで私を助けることができますか?

+0

テストケースにはどのような種類のNatvis XMLファイルを含めましたか? –

+0

ありがとう - 私の答えを参照してください - stl.natvisファイルは、デバッガによって考慮されませんでした。 – Malick

答えて

2

は、私は非常に奇妙な理由で、私は(私のためC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers)私のVSのインストールディレクトリにあるstl.natvisファイルを答えを見つけると私は私のプロジェクトに追加したことを自動的にデバッガによって認識されないれます。

解決策は私の解決策(右クリック→新しい項目の追加)にDebugger visualization file (.natvis)を追加して、stl.natvisファイルの内容をこの新しいファイルにコピー/ペーストすることでした。リビルド後、標準のstd:文字列がデバッガによって適切に表示されます。

完全にするために、2015年

<!-- VC 2015 --> 
    <Type Name="std::basic_string&lt;char,*&gt;"> 
    <DisplayString Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Buf,na}</DisplayString> 
    <DisplayString Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Ptr,na}</DisplayString> 
    <StringView Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf,na</StringView> 
    <StringView Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr,na</StringView> 
    <Expand> 
     <Item Name="[size]" ExcludeView="simple">_Mypair._Myval2._Mysize</Item> 
     <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myres</Item> 
     <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item> 
     <ArrayItems> 
     <Size>_Mypair._Myval2._Mysize</Size> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf</ValuePointer> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr</ValuePointer> 
     </ArrayItems> 
    </Expand> 
    </Type> 

    <!-- VC 2015 --> 
    <Type Name="std::basic_string&lt;wchar_t,*&gt;"> 
    <AlternativeType Name="std::basic_string&lt;unsigned short,*&gt;" /> 
    <AlternativeType Name="std::basic_string&lt;char16_t,*&gt;" /> 
    <DisplayString Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Buf,su}</DisplayString> 
    <DisplayString Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Ptr,su}</DisplayString> 
    <StringView Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf,su</StringView> 
    <StringView Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr,su</StringView> 
    <Expand> 
     <Item Name="[size]" ExcludeView="simple">_Mypair._Myval2._Mysize</Item> 
     <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myres</Item> 
     <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item> 
     <ArrayItems> 
     <Size>_Mypair._Myval2._Mysize</Size> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf</ValuePointer> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr</ValuePointer> 
     </ArrayItems> 
    </Expand> 
    </Type> 

    <Type Name="std::basic_string&lt;char32_t,*&gt;"> 
    <DisplayString Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Buf,s32}</DisplayString> 
    <DisplayString Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Ptr,s32}</DisplayString> 
    <StringView Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf,s32</StringView> 
    <StringView Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr,s32</StringView> 
    <Expand> 
     <Item Name="[size]" ExcludeView="simple">_Mypair._Myval2._Mysize</Item> 
     <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myres</Item> 
     <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item> 
     <ArrayItems> 
     <Size>_Mypair._Myval2._Mysize</Size> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &lt; _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf</ValuePointer> 
     <ValuePointer Condition="_Mypair._Myval2._Myres &gt;= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr</ValuePointer> 
     </ArrayItems> 
    </Expand> 
    </Type> 

編集

は、最終的な時計のコンソールの下を参照してください。Visual Studio用のstd ::文字列を扱うstl.natvisの一部以下を参照してください。 (また、stl.natvisの一部をコピーする必要があることに注意してください。完全コピー/過去が機能しないようです)

enter image description here

+0

natvisファイルの更新後にデバッガウィンドウを表示することはできますか? –

+0

@ J.Piquardは私の編集を参照してください – Malick

+0

共有してくれてありがとう、Malick :)あなたの回答を答えに記入してください。それは同じ問題を抱える他のコミュニティのメンバーに役立ちます。 –

0

あなたがVSで選択する言語は、これに影響します。 .natvis xmlファイルのスキーマは、私のコンピュータの$(VSINSTALLDIR)/ xml/schemas/$(LANG)/natvis.xsd、 には2つのバージョン、1033と2052があり、後者はもう一方それは、より多くの要素が定義されています(例えばstl.nativsで使用される<SmartPointerUsage>など)。 デバッガの変数検査が機能しない場合は、新しいnatvis.xsdを持つ特別な言語に言語を変更しようとする場合があります。

1

これは答えではありませんが、ゼロで終わらない可能性のある長さの文字列を表示する方法を尋ねます。そのようなタイプを視覚化したい

class String_Ref{ const char* _p; size_t _len; }; 
+0

これは質問に対する答えを提供しません。 [類似の質問を検索する](// stackoverflow.com/search)、またはページの右側にある関連するリンクされた質問を参照して回答を見つけることができます。関連しているが異なる質問がある場合は、[新しい質問をしてください](// stackoverflow。com/questions/ask)にアクセスし、コンテキストの提供に役立つこのリンクを表示します。参照:[質問する、回答を得る、混乱を招かない](// stackoverflow.com/tour) – Bryan

+0

新しい質問がある場合は、[質問する](https://stackoverflow.com/questions/)をクリックして質問してください。質問)ボタンをクリックします。コンテキストを提供する場合は、この質問へのリンクを含めてください。 - [レビューの投稿](/レビュー/低品質の投稿/ 18989529) –

関連する問題