2010-01-21 20 views
18

Quando eseguo una normale istruzione di asserzione mentre eseguo il debug con Visual Studio, ottengo l'opzione di entrare nel debugger in modo da poter vedere l'intera traccia dello stack e le variabili locali, non solo il messaggio assert.Debug di asserzioni in Qt Creator

E 'possibile farlo con Qt Creator + mingw32 e Q_ASSERT/Q_ASSERT_X?

risposta

7

È possibile installare un gestore per i messaggi/avvertimenti che Qt emette, e fare il proprio trattamento degli stessi. Vedere la documentazione per qInstallMsgHandler e l'esempio che danno lì. Dovrebbe essere facile inserire un'interruzione in un gestore di messaggi personalizzato (o, in effetti, solo affermare da solo in quel punto). L'unico piccolo svantaggio è che sarai un po 'più in basso nello stack rispetto a dove si è verificato l'errore, ma è semplice accrescere lo stack finché non si ottiene il frame corretto.

+3

Ho usato l'esempio con __asm ​​("int3") prima dell'abort () chiama e funziona alla grande –

2

È possibile. Ho codificato una funzione BreakInDebugger a mano e una macro assert che chiama la funzione.

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

16

È possibile. In qualche modo la funzione ha smesso di funzionare per me, ma in pratica quello che vuoi è fermarsi su qFatal(). Per accertarsi che ciò accada, in qt Creator andare su Strumenti -> Opzioni -> Debugger -> GDB e selezionare "Ferma quando viene emesso un qFatal"

+0

Sembra l'opzione giusta (perché non è attiva di default?), Ma non sembra funzionare neanche per me. –

+1

Il riquadro di configurazione è chiamato "GDB Extended" in Qt Creator 5.3 e possibilmente in seguito. –

+0

Ha funzionato per me: Qt Creator 5.3 (32) + Qt Libraries 5.9 (64) + MSYS2/MinGW (64). –