IDE Debug Helpers

From Qt Wiki
Revision as of 14:30, 23 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


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 <nowiki&gt;[Visualizer]</nowiki&gt; section, before the STL/ATL containers.

<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 />

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&quot;:http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2 for details.

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

So we can visualize QString and some other types using .natvis file
&#40;save to file: USERPROFILEDocuments\Visual Studio 2012\Visualizers\Qt5.natvis&amp;#41;

<br />&amp;lt;?xml version=&quot;1.0&amp;quot; encoding=&quot;utf-8&amp;quot;?&amp;gt;<br />&lt;AutoVisualizer &gt;

&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;

&lt;Type Name=&quot;QtPrivate::RefCount&amp;quot;&gt;<br /> &lt;DisplayString&amp;gt;{atomic}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;

&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;

&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;

&lt;Type Name=&quot;QByteArray&amp;quot;&gt;<br /> &lt;DisplayString&amp;gt;{*d}&lt;/DisplayString&amp;gt;<br /> &lt;/Type&amp;gt;

&amp;lt;! More Qt5 types &amp;gt;

&lt;/AutoVisualizer&amp;gt;<br />

MS Visual Studio 2013

The ".natvis&quot; 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