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:
https://github.com/KDAB/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
(https://github.com/KDAB/KDAB-Creator).
Some screenshots can be found here: http://www.kdab.com/gammaray
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?
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.
And how much does the current code depend on x86/64?
Would it be hard to support PPC?
Peter