2011-03-26 4 views
7

Il mio programma Qt (g ++ 4.4.0) mi restituisce l'errore Libreria di runtime Microsoft Visual C++ "Questa applicazione ha richiesto al runtime di interromperlo in un modo insolito" quando lo chiudo. Ma quando lo eseguo nel debugger, non ricevo il messaggio di errore. Qualcuno sa come ottenere informazioni sul crash? La finestra di messaggio ha solo un pulsante OK."Questa applicazione ha richiesto al runtime di terminarlo in un modo insolito."

Modificato per aggiungere: In seguito al consiglio di Wimmel, l'ho collegato al debugger. Ci sono due fili rimasti in vita, con ThreadID 1 e 3. Gli stack simile a questa:

Level Function    File       Line Address 
0  VTagOutput   C:\Windows\syswow64\user32.dll 0 0x7529438d 
1  VTagOutput   C:\Windows\syswow64\user32.dll 0 0x7529438d 
2  USER32!EmptyClipboard C:\Windows\syswow64\user32.dll 0 0x752a2674 
3  ??             0 

Level Function         File       Line Address 
0  ntdll!LdrFindResource_U      C:\Windows\SysWOW64\ntdll.dll 0 0x76f5000d 
1  ntdll!LdrSetAppCompatDllRedirectionCallback C:\Windows\SysWOW64\ntdll.dll 0 0x76fdfabe 
2  ??                  0 0x7b9609b5 
3  ??                  0 

Forse il secondo thread è la visualizzazione del messaggio di errore? Il primo è un po 'strano: le prime due righe sono identiche. Non ho nulla nel mio codice che contenga il nome TagOutput, e nemmeno Qt per quanto ne so.

+1

Forse si può connettere il debugger prima di fare clic su OK, e guardare lo stack frame di tutte le discussioni per vedere dove l'errore proviene. – wimh

+0

Tutti i simboli visualizzati provengono dalle DLL di sistema. Hai incluso informazioni di debug nella tua build? –

+0

@lan: sì. Sospetto che il programma sia già andato, e questo è solo il meccanismo di segnalazione degli errori del sistema. – TonyK

risposta

3

L'unica volta che ho visto quel messaggio di errore con Qt è stato quando ho provato a configurare un ambiente di sviluppo Qt e ho installato diverse versioni di MinGW. Sembrava che il mio eseguibile stesse trovando e caricando una versione di mingwm10.dll che non fosse d'accordo con tutto il resto. Ho dato la caccia ed eliminato tutte le versioni di quella dll tranne quella che volevo e il problema è scomparso.

+0

Li ho cacciati e ce ne sono sei (!), In tre versioni diverse. Come hai deciso quale volevi? – TonyK

+0

Questo dipende, ma prova questo. Se si utilizza l'SDK Qt, probabilmente si desidera quello incluso con SDK. Un metodo che mi viene in mente è quello di copiare ciascuna delle DLL che hai trovato nella stessa directory dell'eseguibile e provare ognuna di esse, una alla volta, finché non ne identifica una compatibile. Se davvero, questa è la causa. –

+0

Grazie per il suggerimento. Ma c'è solo un mingwm10.dll nel mio percorso, ed è arrivato con Qt, quindi non penso che questo possa essere il problema. Nel frattempo il programma ha smesso di schiantarsi, dopo che sono state apportate alcune modifiche apparentemente non correlate. Quindi è in agguato lì dentro ... – TonyK

0

Utilizzare procmon.exe e filtrare il nome del processo e l'accesso al file per trovare le dipendenze mancanti.

Ho avuto lo stesso problema con Qt 5.0.1.
Il programma mancava alcune DLL dal framework Qt.
li trova nella directory:

<QTINSTALLDIR>\Qt5.0.1\5.0.1\mingw47_32\plugins 
Problemi correlati