Difference between revisions of "IDE Debug Helpers"

From Qt Wiki
Jump to: navigation, search
Line 1: Line 1:
[[Category:Tools::QtCreator]]<br />[[Category:Developing_Qt]]
+
[[Category:Tools::QtCreator]]
 +
[[Category:Developing_Qt]]
  
 
= IDE debug helpers =
 
= IDE debug helpers =
Line 5: Line 6:
 
== Qt Creator ==
 
== Qt Creator ==
  
Qt Creator directly supports introspection of all Qt Containers and QObject derived classes for Qt 4 and Qt 5.<br />User defined types can be supported in addition, see [http://doc.qt.io/qtcreator-2.8/creator-debugging-helpers.html the Qt Creator documentation] for details.
+
Qt Creator directly supports introspection of all Qt Containers and QObject derived classes for Qt 4 and Qt 5.
 +
User defined types can be supported in addition, see [http://doc.qt.io/qtcreator-2.8/creator-debugging-helpers.html the Qt Creator documentation] for details.
  
 
== MS visual studio QString &amp; QByteArray expansions ==
 
== MS visual studio QString &amp; QByteArray expansions ==
  
The new layout of QString in Qt 5 is hard to inspect using the debugger.<br />The following code can be added to autoexp.dat (c:files(x86)visual studio 9.0\common7\packages\debugger\autoexp.dat)<br />You should add it to the &lt;nowiki&amp;gt;[Visualizer]&lt;/nowiki&amp;gt; section, before the STL/ATL containers.
+
The new layout of QString in Qt 5 is hard to inspect using the debugger.
 +
The following code can be added to autoexp.dat (c:files(x86)visual studio 9.0\common7\packages\debugger\autoexp.dat)
 +
You should add it to the <nowiki>[Visualizer]</nowiki> section, before the STL/ATL containers.
  
<code><br />; Qt types<br />QStringData{<br /> preview ([(unsigned short*)$e.d + 2 + $e.offset,su])<br /> stringview ([(unsigned short*)$e.d + 2 + $e.offset,sub])<br />}<br />QString{<br /> preview ([$e.d])<br />}<br />QByteArrayData{<br /> preview ([(unsigned char*)$e.d + 4 + $e.offset,s])<br /> stringview ([(unsigned char*)$e.d + 4 + $e.offset,sb])<br />}<br />QByteArray{<br /> preview ([$e.d])<br />}<br /></code>
+
<code>
 +
; Qt types
 +
QStringData{
 +
preview ([(unsigned short*)$e.d + 2 + $e.offset,su])
 +
stringview ([(unsigned short*)$e.d + 2 + $e.offset,sub])
 +
}
 +
QString{
 +
preview ([$e.d])
 +
}
 +
QByteArrayData{
 +
preview ([(unsigned char*)$e.d + 4 + $e.offset,s])
 +
stringview ([(unsigned char*)$e.d + 4 + $e.offset,sb])
 +
}
 +
QByteArray{
 +
preview ([$e.d])
 +
}
 +
</code>
  
Unfortunately, sizeof() cannot be used. That is why there is a constant 2 or 4 for the offset pointer.<br />For an x64 build, the sizes most likely need to be doubled.
+
Unfortunately, sizeof() cannot be used. That is why there is a constant 2 or 4 for the offset pointer.
 +
For an x64 build, the sizes most likely need to be doubled.
  
 
== MS Visual Studio 2012 ==
 
== MS Visual Studio 2012 ==
  
There is a new way to visualize native type, see<br />&quot;http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2&amp;quot;:http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2 for details.
+
There is a new way to visualize native type, see
 +
"http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2":http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2 for details.
  
Ready-made .natvis files are included in the &quot;Visual Studio add-in&amp;quot;:http://wiki.qt.io/QtVSAddin, and can be grabbed directly from &quot;gitorious&amp;quot;:https://qt.gitorious.org/qt-labs/vstools/source/tools/Qt4EEAddin/qt5.natvis.
+
Ready-made .natvis files are included in the "Visual Studio add-in":http://wiki.qt.io/QtVSAddin, and can be grabbed directly from "gitorious":https://qt.gitorious.org/qt-labs/vstools/source/tools/Qt4EEAddin/qt5.natvis.
  
So we can visualize QString and some other types using .natvis file<br />&amp;#40;save to file: USERPROFILEDocuments\Visual Studio 2012\Visualizers\Qt5.natvis&amp;amp;#41;<br /><code><br />&amp;lt;?xml version=&quot;1.0&amp;quot; encoding=&quot;utf-8&amp;quot;?&amp;gt;<br />&lt;AutoVisualizer &gt;
+
So we can visualize QString and some other types using .natvis file
 +
(save to file: USERPROFILEDocuments\Visual Studio 2012\Visualizers\Qt5.natvis)
 +
<code>
 +
<?xml version="1.0" encoding="utf-8"?>
 +
<AutoVisualizer >
  
&lt;Type Name=&quot;QString&amp;quot;&gt;<br /> &lt;DisplayString&amp;gt;{(char*)d + d-&amp;gt;offset,su}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;
+
<Type Name="QString">
 +
<DisplayString>{(char*)d + d->offset,su}</DisplayString>
 +
</Type>
  
&lt;Type Name=&quot;QtPrivate::RefCount&amp;quot;&gt;<br /> &lt;DisplayString&amp;gt;{atomic}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;
+
<Type Name="QtPrivate::RefCount">
 +
<DisplayString>{atomic}</DisplayString>
 +
</Type>
  
&lt;Type Name=&quot;QBasicAtomicInteger&amp;amp;amp;lt;int&amp;amp;amp;gt;&quot;&gt;<br /> &lt;DisplayString&amp;gt;{_q_value}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;
+
<Type Name="QBasicAtomicInteger&amp;amp;amp;lt;int&amp;amp;amp;gt;">
 +
<DisplayString>{_q_value}</DisplayString>
 +
</Type>
  
&lt;Type Name=&quot;QTypedArrayData&amp;amp;amp;lt;'''&amp;amp;gt;&quot;&gt;<br /> &lt;DisplayString&amp;gt;{{Count = {size}}}&lt;/DisplayString&amp;gt;<br /> &lt;Expand&amp;gt;<br /> &lt;Item Name=&quot;[size]&quot;&gt;size&amp;lt;/Item&amp;gt;<br /> &lt;ArrayItems&amp;gt;<br /> &lt;Size&amp;gt;size&amp;lt;/Size&amp;gt;<br /> &lt;ValuePointer&amp;gt;(iterator) ((char''')this + offset)&lt;/ValuePointer&amp;gt;<br /> &lt;/ArrayItems&amp;gt;<br /> &lt;/Expand&amp;gt;<br /> &lt;/Type&amp;gt;
+
<Type Name="QTypedArrayData&amp;amp;amp;lt;'''&amp;amp;gt;">
 +
<DisplayString>{{Count = {size}}}</DisplayString>
 +
<Expand>
 +
<Item Name="[size]">size</Item>
 +
<ArrayItems>
 +
<Size>size</Size>
 +
<ValuePointer>(iterator) ((char''')this + offset)</ValuePointer>
 +
</ArrayItems>
 +
</Expand>
 +
</Type>
  
&lt;Type Name=&quot;QByteArray&amp;quot;&gt;<br /> &lt;DisplayString&amp;gt;{*d}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;
+
<Type Name="QByteArray">
 +
<DisplayString>{*d}</DisplayString>
 +
</Type>
  
&amp;lt;!— More Qt5 types… —&amp;gt;
+
<!— More Qt5 types… —>
  
&lt;/AutoVisualizer&amp;gt;<br /></code>
+
</AutoVisualizer>
 +
</code>
  
 
== MS Visual Studio 2013 ==
 
== MS Visual Studio 2013 ==
  
The &quot;.natvis&amp;quot; files introduced in MSVS2012 received some additional attention in MSVS2013:
+
The ".natvis" files introduced in MSVS2012 received some additional attention in MSVS2013:
  
 
http://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx
 
http://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx

Revision as of 08:54, 25 February 2015


IDE debug helpers

Qt Creator

Qt Creator directly supports introspection of all Qt Containers and QObject derived classes for Qt 4 and Qt 5. User defined types can be supported in addition, see the Qt Creator documentation for details.

MS visual studio QString & QByteArray expansions

The new layout of QString in Qt 5 is hard to inspect using the debugger. The following code can be added to autoexp.dat (c:files(x86)visual studio 9.0\common7\packages\debugger\autoexp.dat) You should add it to the [Visualizer] section, before the STL/ATL containers.

Qt types

QStringData{

preview ([(unsigned short*)$e.d + 2 + $e.offset,su])
stringview ([(unsigned short*)$e.d + 2 + $e.offset,sub])

} QString{

preview ([$e.d])

} QByteArrayData{

preview ([(unsigned char*)$e.d + 4 + $e.offset,s])
stringview ([(unsigned char*)$e.d + 4 + $e.offset,sb])

} QByteArray{

preview ([$e.d])

}

Unfortunately, sizeof() cannot be used. That is why there is a constant 2 or 4 for the offset pointer. For an x64 build, the sizes most likely need to be doubled.

MS Visual Studio 2012

There is a new way to visualize native type, see "http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2":http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2 for details.

Ready-made .natvis files are included in the "Visual Studio add-in":http://wiki.qt.io/QtVSAddin, and can be grabbed directly from "gitorious":https://qt.gitorious.org/qt-labs/vstools/source/tools/Qt4EEAddin/qt5.natvis.

So we can visualize QString and some other types using .natvis file (save to file: USERPROFILEDocuments\Visual Studio 2012\Visualizers\Qt5.natvis) <?xml version="1.0" encoding="utf-8"?> <AutoVisualizer >

<Type Name="QString">

<DisplayString>{(char*)d + d->offset,su}</DisplayString>
</Type>

<Type Name="QtPrivate::RefCount">

<DisplayString>{atomic}</DisplayString>
</Type>

<Type Name="QBasicAtomicInteger&amp;amp;lt;int&amp;amp;gt;">

<DisplayString>{_q_value}</DisplayString>
</Type>

<Type Name="QTypedArrayData&amp;amp;lt;&amp;gt;">

<DisplayString>{{Count = {size}}}</DisplayString>
<Expand>
<Item Name="[size]">size</Item>
<ArrayItems>
<Size>size</Size>
<ValuePointer>(iterator) ((char)this + offset)</ValuePointer>
</ArrayItems>
</Expand>
</Type>

<Type Name="QByteArray">

<DisplayString>{*d}</DisplayString>
</Type>

<!— More Qt5 types… —>

</AutoVisualizer>

MS Visual Studio 2013

The ".natvis" files introduced in MSVS2012 received some additional attention in MSVS2013:

http://blogs.msdn.com/b/vcblog/archive/2013/06/28/using-visual-studio-2013-to-write-maintainable-native-visualizations-natvis.aspx