2010-01-21 16 views
18

Wenn ich eine normale assert-Anweisung während des Debuggen mit Visual Studio traf, bekomme ich die Option, in den Debugger zu brechen, so dass ich die gesamte Stack-Trace und die lokalen Variablen, nicht nur die Assert-Nachricht sehen kann.Debuggen in Qt Creator

Ist dies mit Qt Creator + mingw32 und Q_ASSERT/Q_ASSERT_X möglich?

Antwort

7

Sie können einen Handler für die Meldungen/Warnungen installieren, dass Qt aussendet, und Ihre eigene Verarbeitung von ihnen tun. Siehe die Dokumentation für qInstallMsgHandler und das Beispiel, das sie dort geben. Es sollte einfach sein, einen Break in einen benutzerdefinierten Message-Handler einzufügen (oder einfach selbst zu diesem Zeitpunkt zu bestätigen). Der eine kleine Nachteil ist, dass Sie etwas weiter unten im Stapel sind als dort, wo der Fehler tatsächlich aufgetreten ist, aber es ist einfach, den Stapel zu erhöhen, bis Sie im richtigen Rahmen sind.

+3

Ich habe das Beispiel mit __asm ​​("int3") vor dem Abbruch benutzt () Anruf und es funktioniert super. –

2

Es ist möglich. Ich habe eine BreakInDebugger-Funktion von Hand und ein Assert-Makro, das die Funktion aufruft, codiert.

z: #define MyAssert(X) (BreakInDebugger();Q_ASSERT(X))

16

Es ist möglich. Irgendwie funktioniert das Feature für mich nicht mehr, aber im Grunde ist es das, was du willst, wenn du auf qFatal() stoppst. Um dies zu gewährleisten, gehen Sie in qt Creator zu Extras -> Optionen -> Debugger -> GDB und wählen "Stop wenn ein qFatal ausgegeben wird"

+0

Sieht wie die richtige Option aus (warum ist es nicht standardmäßig aktiviert?), Aber es scheint auch nicht für mich zu funktionieren. –

+1

Der Konfigurationsbereich heißt in Qt Creator 5.3 und möglicherweise später "GDB Extended". –

+0

Arbeitete für mich: Qt Creator 5.3 (32) + Qt Bibliotheken 5.9 (64) + MSYS2/MinGW (64). –