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 [http://doc-snapshot.qt-project.org/qtcreator-2.5/creator-debugging-helpers.html 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:\program files(x86)\microsoft visual studio 9.0\common7\packages\debugger\autoexp.dat)
You should add it to the <nowiki>[Visualizer]</nowiki> 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])
- }
- preview ([$e.d])
- }
- QByteArrayData{
- preview ([(unsigned char*)$e.d + 4 + $e.offset,s])
- stringview ([(unsigned char*)$e.d + 4 + $e.offset,sb])
- }
- 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 [code.msdn.microsoft.com] for details.
So we can visualize QString and some other types using .natvis file
(save to file: USERPROFILE\My Documents\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<int>">
- <DisplayString>{_q_value}</DisplayString>
- </Type>
- <Type Name="QTypedArrayData<*>">
- <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>

