Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: kambala от Август 30, 2013, 22:34



Название: отображение содержимого QString и QByteArray из Qt 4 в отладчике MSVS 2012
Отправлено: kambala от Август 30, 2013, 22:34
давно мучился этим вопросом, и вот только на днях наконец-то нашел решение.

Qt VS Addin для 2012 студии создает свой файлик с расширениями для отладчика тут: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\Visualizers\qt5.natvis. Необходимо либо заменить существующие определения для QString и QByteArray в этом файле либо создать новый файл с любым названием и расширением natvis (например qt4.natvis):
Код
XML
   <!-- Qt 4 -->
   <Type Name="QString">
       <DisplayString>{d->data,su}</DisplayString>
       <StringView>d->data,su</StringView>
       <Expand>
           <Item Name="[size]">d-&gt;size</Item>
           <Item Name="[referenced]">d-&gt;ref._q_value</Item>
           <ArrayItems>
               <Size>d-&gt;size</Size>
               <ValuePointer>d->data,c</ValuePointer>
           </ArrayItems>
       </Expand>
   </Type>
 
   <Type Name="QByteArray">
       <DisplayString>{d->data,s}</DisplayString>
       <StringView>d->data,s</StringView>
       <Expand>
           <Item Name="[size]">d-&gt;size</Item>
           <Item Name="[referenced]">d-&gt;ref._q_value</Item>
           <ArrayItems>
               <Size>d-&gt;size</Size>
               <ValuePointer>d->data,c</ValuePointer>
           </ArrayItems>
       </Expand>
   </Type>
 
   <!-- Qt 5
   <Type Name="QString">
       <DisplayString>{((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub}</DisplayString>
       <StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub</StringView>
       <Expand>
           <Item Name="[size]">d-&gt;size</Item>
           <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
           <ArrayItems>
               <Size>d-&gt;size</Size>
               <ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),c</ValuePointer>
           </ArrayItems>
       </Expand>
   </Type>
 
   <Type Name="QByteArray">
       <DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb}</DisplayString>
       <StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb</StringView>
       <Expand>
           <Item Name="[size]">d-&gt;size</Item>
           <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
           <ArrayItems>
               <Size>d-&gt;size</Size>
               <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),c</ValuePointer>
           </ArrayItems>
       </Expand>
   </Type>
   -->

если создаете новый файл, то он должен выглядеть так:
Код
XML
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
сюда вставить вышеуказанный кусок
</AutoVisualizer>


Название: Re: отображение содержимого QString и QByteArray из Qt 4 в отладчике MSVS 2012
Отправлено: b-s-a от Сентябрь 02, 2013, 10:55
Создай баг на http://bugreports.qt-project.org. Может не только русскоязычным это поможет.


Название: Re: отображение содержимого QString и QByteArray из Qt 4 в отладчике MSVS 2012
Отправлено: kambala от Сентябрь 02, 2013, 11:33
это не баг: аддин не будет поддерживать Qt 4 для студии 2012 насколько я знаю.