GammaRay - Introspection/Debugging Tool for Qt Applications

Volker Krause vkrause at
Tue Nov 1 07:58:42 GMT 2011

On Monday 31 October 2011 22:36:08 Peter K├╝mmel wrote:
> On 30.10.2011 13:21, Volker Krause wrote:
> > Hi!
> > 
> > During the Qt Dev Days in Munich last week we (KDAB) released a new Free
> > Software introspection/debugging tool for Qt applications, called
> > GammaRay:
> >
> > 
> > It hooks itself into a Qt application (at start-up or at runtime) using a
> > variety of methods (ranging from assembler hacks to (ab)using Qt plug-ins)
> > and uses the Qt meta object system for introspecting object, properties,
> > signals, slots, signal/slot connections, etc. Nothing really new until
> > here, tools like Qt Inspector or KSpy can do this already. On top of that
> > GammaRay adds a bunch of higher level tools though, for example:
> > 
> > - QWidget layout overlay, similar to designer
> > - Inspecting a QGraphicsScene and various details of QGraphicsItems
> > (visualizing shapes, bounding rects, transformation origins, etc)
> > - Looking at the full (proxy) model hierarchy and all intermediate results
> > in there
> > - a live updating QStateMachine visualization
> > - attaching of QScriptEngineDebugger and QWebInspector to the
> > corresponding
> > objects in the application
> > - a QTextDocument document object model viewer
> > 
> > Additionally, GammaRay has a plug-in interface for adding new tools, say a
> > KJob tracker.
> > 
> > GammaRay works on Linux, Mac and Windows (MSVC only so far), it needs to
> > be
> > compiled against the same Qt version used by the application you are about
> > to debug though. There's also a Qt Creator plug-in for it
> > (
> > 
> > Some screenshots can be found here:
> > 
> > GammaRay was originally developed in support for the Kontact Touch
> > project,
> > back when there wasn't a QML debugger yet. The proxy model debugger also
> > proved quite helpful on KMail, maybe it can help some of you as well :)
> > 
> > Needless to say that contributions are very much welcome.
> > 
> > regards
> > Volker
> Congratulation for this very nice tool!
> I've also tried to attach to console apps without success.
> Then I realized that you use the hijacked process to show
> the GammaRay mainwindow which is not possible in a
> QCoreApplication executable.
> So I wonder how difficult it would be to run GammaRay in a
> different process? Then an IPC mechanism is needed for all
> the information. Would this be fast enough? Do you plan
> to add this in future?

I'd love to have that, for console apps, remote debugging on an embedded 
system, and for less interference with the debugged process :)

You can probably get a large amount of the features by having some kind of 
network transparent QAbstractItemModel adapter. But some feature need direct 
memory access, like rendering of a second QGraphicsScene view, unless you want 
to send pixmaps over IPC.

> Is there a single point where all the information of
> the target process goes through or is it all over the place?
> I assume at least each plugin pulls information by itself.

Most of it goes through probe.cpp and the object models provided by it, 
however all the plug-ins access raw QObject pointers they retrieve from those 
models (and thus are bound to the same process).

> And how much does the current code depend on x86/64?
> Would it be hard to support PPC?

There are two injectors that are very architecture specific ("windll" on 
Windows/MSVC and "preload" on Mac), they assume a specific layout in memory 
and rewrite assembly code to intercept function calls.
All other injectors should be architecture independent ("preload" on Linux, 
"gdb" on any Unix and "style" everywhere), but I don't think they have been 
tested yet on non-x86 either.
Probably something I should document in the wiki...


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <>

More information about the kde-core-devel mailing list