2016-10-24 1 views
0

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

В настоящее время мой отладчик выглядит следующим образом: enter image description here

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

+0

Какой XML-файл Natvis вы включили в свой тестовый пример? –

+0

спасибо - см. Мой ответ - файл stl.natvis не рассматривался отладчиком. – Malick

ответ

2

я найти ответ, по очень странной причине файл 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, которая имеет дело с станд :: строка для визуального студии 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, которая вам нужна, кажется, что полная копия/прошлое не работает.)

enter image description here

+0

Не могли бы вы показать окно вашего отладчика, как после обновления файла natvis? –

+0

@ J.Piquard см. Мое редактирование – Malick

+0

Спасибо за ваш обмен, Малик :) Пожалуйста, отметьте свой ответ в качестве ответа, так что это поможет другим членам сообщества, которые отвечают той же проблеме. –

0

Я нахожу, что langauge, который вы выберете в VS, повлияет на это. . Схема файла .natvis xml определена в $ (VSINSTALLDIR)/xml/schemas/$ (LANG) /natvis.xsd, на моем компьютере есть две версии: 1033 и 2052, а более поздняя - более новая, чем другая , он имеет гораздо больше элементов, определенных (например, <SmartPointerUsage>, который используется в stl.nativs). , если вы обнаружите, что проверочная проверка вашего отладчика не работает, вы можете попытаться изменить язык на специальный, который имеет новый 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/ спросить). Включите ссылку на этот вопрос, если это поможет обеспечить контекст. - [Из обзора] (/ review/low-quality-posts/18989529) –