2014-10-13 15 views
5

Ho una app VB6 che gira su migliaia di macchine. Su un numero molto piccolo di questi viene visualizzato un errore "L'applicazione ha smesso di funzionare". L'ho visto su Vista, Windows 7 (x32 e x64) e Windows 8.1.Debug VB6 Crash Dump

L'ho ristretto a qualche istante tra il primo evento form_resize e il dipinto effettivo del modulo durante il primo ridisegno della finestra principale. Sta succedendo da qualche parte fuori dal mio codice VB6 da qualche parte perché non riesco a cogliere l'errore e tutto il logging che ho inserito è inutile. Ad esempio, se l'applicazione si avvia con la finestra principale visibile si blocca. Se si avvia minimizzato, viene eseguito fino a quando non si attiva la finestra e quindi si blocca. Oggi sono riuscito a ottenere un dumping da un computer client (perché, ovviamente, non possiamo mai farlo andare in crash sulle nostre macchine dev). Ecco cosa mi dice WinDBG. Apprezzerei (ANY) aiuto come ho cercato di arrivare a fondo di questo dal 2012 (!!!!!!).

FOLLOWUP_IP: 
msvbvm60!Zombie_Release+1233b 
72960d94 8901   mov  dword ptr [ecx],eax 

APP: timeclockmts.exe 

ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) x86fre 

PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS 

BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS 

LAST_CONTROL_TRANSFER: from 72a09a7b to 72960d94 

STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong. 
00097504 72a09a7b 01396b8c 4fb934ec 60030053 msvbvm60!Zombie_Release+0x1233b 
00097544 72a09c2c 01396b8c 00000009 00000000 msvbvm60!BASIC_DISPINTERFACE_GetTypeInfo+0x2aa 
00097574 758c370d 01396b8c 00000009 75870630 msvbvm60!EVENT_SINK_Invoke+0x50 
000975cc 7589c30e 00000000 000273c9 0b0dcb40 oleaut32!VarMonthName+0x11350 
000975e0 758c41e5 00000001 00000002 00000000 oleaut32!VarDecNeg+0x5d45 
000975f4 729932c4 0b0dcb40 000273c9 00000000 oleaut32!VarMonthName+0x11e28 
00097628 72973db1 0523c0dc 00000012 4180923a msvbvm60!IID_IVbaHost+0x24c84 
0009767c 729c1e19 0000000d 4180923a 0523bebc msvbvm60!IID_IVbaHost+0x5771 
000976b8 729acdb0 0000000d 4180923a 05221380 msvbvm60!IID_IVbaHost+0x537d9 
000976f4 729ad0a1 0523c0dc 0000000d 4180923a msvbvm60!IID_IVbaHost+0x3e770 
00097728 72980eed 034a0904 0000000d 00000001 msvbvm60!IID_IVbaHost+0x3ea61 
00097988 4fbadfdb 01396a70 000979fc 000979f4 msvbvm60!IID_IVbaHost+0x128ad 
00097a20 4fbaa41a 01396a70 0009834c 00098478 ciaXPLabel30!DllCanUnloadNow+0x10efd 
00097a5c 75873e75 01396a70 0b0ee654 00000000 ciaXPLabel30!DllCanUnloadNow+0xd33c 
00097a78 72a16ef5 01396b8c 0000001c 00000004 oleaut32!DispCallFunc+0xa6 
000983d4 72a09a7b 01396b8c 4fb934ec 60030053 msvbvm60!_vbaAptOffset+0x68b 
00098414 72a09c2c 01396b8c 00000009 00000000 msvbvm60!BASIC_DISPINTERFACE_GetTypeInfo+0x2aa 
00098444 758c370d 01396b8c 00000009 75870630 msvbvm60!EVENT_SINK_Invoke+0x50 
0009849c 7589c30e 00000000 000273c9 0b0dcb40 oleaut32!VarMonthName+0x11350 
000984b0 758c41e5 00000001 00000002 00000000 oleaut32!VarDecNeg+0x5d45 
000984c4 729932c4 0b0dcb40 000273c9 00000000 oleaut32!VarMonthName+0x11e28 
000984f8 72973db1 0523c0dc 00000012 4180923a msvbvm60!IID_IVbaHost+0x24c84 
+3

Si prega di correggere i simboli prima e modificare il tuo post con un nuovo! Analizzare -v output l'output che hai incollato è un po 'inutile che non mostra alcuna informazione nemmeno dove si blocca per correggere i simboli set .sympath a SRV * Z: \ simboli * http: //msdl.microsoft.com/download/symbols poi fai un .reload/f per recuperare i simboli per i moduli di sistema così come il tuo codice quindi fai un! analizzare -v e incollare l'output potrebbe essere qualcuno può vedere un pattern (la casella di commento ha mangiato un asterisco nel percorso SRV letto su _NT_SYMBOL_PATH in msdn per la sintassi esatta – blabb

+0

in realtà ho passato le ultime 5 ore a capire quale fosse il problema sul computer di un client che stava subendo l'arresto. controllo di terze parti che è stato consegnato al cumulo di sterco – nemmy

+0

OK Ho seguito il tuo consiglio e corretto i simboli e il primo paio di dozzine di linee della discarica sono ora sopra. elenca il controllo offendente (ciaXPLabel30) che ho determinato stava causando il problema attraverso tentativi ed errori. Se avessi saputo cosa significasse "aggiustare i tuoi simboli" significa 6 ore fa, mi sarei risparmiato mezza giornata. Grazie comunque :) – nemmy

risposta

3

Grazie a blabb che mi ha insegnato come sistemare i miei simboli e rieseguire l'analisi, il motivo del mio incidente è diventato evidente. Sfortunatamente l'avevo già provato io stesso per tentativi ed errori (rimuovendo i controlli da un modulo uno alla volta fino a quando l'arresto non si arrestava). Ecco le linee del crash dump che mi ha detto quello che stava accadendo:

00097a20 4fbaa41a 01396a70 0009834c 00098478 ciaXPLabel30!DllCanUnloadNow+0x10efd 
00097a5c 75873e75 01396a70 0b0ee654 00000000 ciaXPLabel30!DllCanUnloadNow+0xd33c 

Il registro completo si presenta come un ciclo infinito di questo controllo cercando di disporre di se stessa. Ho abbandonato il controllo e ora le cose stanno funzionando bene.

+1

Non sono sicuro di come sia "il log completo", ma da "DllCanUnloadNow' con un offset così grande, non direi che il controllo si sta disponendo. In questo caso non puoi fare affidamento sul nome del metodo. Un offset di grandi dimensioni significa che WinDbg non è riuscito a trovare i simboli sul server Microsoft per quella DLL. Prova 'lm m ciaXPLabel30' per verificare che non ci siano simboli. È anche abbastanza improbabile che un controllo venga eliminato subito dopo il primo evento di ridimensionamento del modulo, cosa ne pensi? –