[Development] Question about Qt's future

Simon Hausmann simon.hausmann at digia.com
Thu Apr 24 09:47:50 CEST 2014


On Monday 21. April 2014 10.41.52 Christoph Feck wrote:
> On Monday 21 April 2014 05:27:33 Joshua Kolden wrote:
> > I’m curious why you are not interested in QML.
> > [...]
> > I see no reason to stay with Qt Widgets at all other than legacy
> > application support.  So what is your concern?
> > [...]
> 
> Not speaking for Michael, but let me add that C++ is much easier to
> debug compared to QML, if you get a crash. We have nearly hundred
> backtraces in the Plasma bug tracker that point back to crashes in
> QtDeclarative, without a single clue where the crash comes from. For
> examples see bugs 328234, 332131, 331060, 333621, 333532, 333334,
> 332995, or 332646 to cite only some fairly recent ones.
> 
> I am not blaming QML here, all those bugs are possibly caused by
> errors in Plasma itself, but the fact that you cannot see from the
> backtrace what caused the crash is a major concern for me.

Let's turn this from a blame game into something more productive.

The nature of the beast is that we do have two language environments here and 
they do (and can't) share the same stack, so stack traces will always be 
separate. However there are ways of determining the "current" JavaScript stack 
trace in parallel. Note that this isn't possible with Qt 5.1 or older, but 
starting with Qt 5.2 it is possible.

Friedemann was kind enough to lay the infrastructure for that in QtQml and 
used it on the Qt Creator side, in a way that could also be used by KDE's 
drkonqi:

It will require a little bit of analysis and interaction with gdb, but I think 
it's doable. It will require looking at the frames gdb reports, and if you see 
functions that take a QV4::ExecutionContext * as a parameter, then you can 
extract the "address" from the gdb output and then call the qt_v4StackTrace 
function in QtQml from within gdb. It will print out a JavaScript stack trace. 
This works rather well and Qt Creator 3.1 provides it through the context menu 
in the debugger, if you'd like to try it out yourself.

This way bug reports in KDE that somehow involve Qt JavaScript execution can - 
in parallel - include a C++ backtrace and a JS stack trace.


Simon



More information about the Development mailing list