Как визуализировать простую строку std :: string с помощью natvis?

Я не могу иметь приличного представления о базовой std: string в VS2015 во время отладки.
Я следовал инструкциям, данным по этому адресу:https://msdn.microsoft.com/fr-fr/library/jj620914.aspx
(это тип отладчика, установленный в основной режим, и снимите оба флажка Use Managed Compatibility Mode а также Use Native Compatibility Mode) Я также добавил файл stl.nativs в свое решение.

В настоящее время мой отладчик выглядит так:
введите описание изображения здесь

Я хотел бы видеть в качестве значения непосредственно «тест» для моей переменной str (вместо очень сложного дерева). Ты можешь помочь мне с этим ?

0

Решение

Я нахожу ответ, по очень странной причине, файл stl.natvis, который я нашел в моем каталоге установки VS ( C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers для меня) и что я добавил в свой проект не является распознается отладчиком автоматически.

Таким образом, решение было добавить еще Debugger visualization file (.natvis) к моему решению (щелкните правой кнопкой мыши -> добавить новый элемент) и скопировать / пропустить содержимое stl.natvis файл в этот новый файл. После перестройки стандартная строка std: соответствующим образом отображается отладчиком.

Для полноты см. Ниже часть stl.natvis который имеет дело с std :: string для visual studio 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>

редактировать

Смотрите ниже финальную консоль часов:
(также обратите внимание, что вам следует скопировать только часть stl.natvis что вы хотите, кажется, что полная копия / прошлое не работает.)

введите описание изображения здесь

2

Другие решения

Я считаю, что язык, который вы выберете в VS, повлияет на это.
схема XML-файла .natvis определяется в $ (VSINSTALLDIR) / xml / schemas / $ (LANG) /natvis.xsd,
на моем компьютере есть две версии: 1033 и 2052, и более поздняя версия новее другой, в ней гораздо больше элементов (например, <SmartPointerUsage> который используется в stl.nativs).
если вы обнаружите, что проверка переменных вашего отладчика не работает, вы можете попробовать изменить язык на специальный, имеющий более новый natvis.xsd.

0

По вопросам рекламы [email protected]