2014-10-13 20 views
5

Mam aplikację VB6, która działa na tysiącach maszyn. Na bardzo małej liczbie tych błędów pojawia się błąd "Ta aplikacja przestała działać". Widziałem to na Vista, Windows 7 (x32 i x64) i Windows 8.1.Debugowanie VB6 Crash Dump

Zawęziłem je do wystąpienia między pierwszym zdarzeniem form_resize a faktycznym malowaniem formularza podczas pierwszego przerysowania głównego okna. Dzieje się to gdzieś poza moim kodem VB6, ponieważ nie mogę złapać błędu, a rejestracja, którą wprowadziłem, jest bezużyteczna. Na przykład, jeśli aplikacja uruchomi się z widocznym głównym oknem, ulegnie awarii. Jeśli uruchamianie zostanie zminimalizowane, uruchomi się, dopóki nie aktywujesz okna, a następnie zawiesi się. Dzisiaj udało mi się uzyskać zrzut awaryjny z komputera klienta (ponieważ, oczywiście, nigdy nie będziemy w stanie go zniszczyć na naszych urządzeniach). Oto, co mi mówi WinDBG. Doceniłbym (KAŻDĄ) pomoc, ponieważ próbowałem dotrzeć do sedna tego od 2012 roku (!!!!!!).

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

Najpierw popraw symbole i edytuj swój wpis za pomocą świeżego! Analysis -v wypisz dane, które wkleiłeś, jest trochę bezużyteczne, nie pokazuje żadnych informacji, nawet jeśli się zawiesza, aby naprawić zestaw symboli .sympath do SRV * Z: \ symbole * http: //msdl.microsoft.com/download/symbols następnie wykonaj .reload/f, aby pobrać symbole dla modułów systemowych, a także twój kod, a następnie wykonaj! analizuj -v i wklej wynik może być ktoś może zobaczyć wzorzec (pole komentarza zjadło gwiazdkę w ścieżce SRV, czytając o _NT_SYMBOL_PATH w msdn dla dokładnej składni – blabb

+0

Właściwie spędziłem ostatnie 5 godzin pracując nad tym, co było problemem komputera klienta, który przeżywał awarię. kontrola zewnętrzna, która została wysłana do kupy gnoju – nemmy

+0

OK Przestrzegałem twoich rad i naprawiłem symbole, a pierwsze dwa tuziny linii zrzutu są teraz powyżej. Linia 15 lub więcej zawiera listę kontrolek powodujących usterkę (ciaXPLabel30), które ustaliłem, powodując problem za pomocą prób i błędów. Gdybym wiedział, co znaczy "naprawianie twoich symboli" 6 godzin temu, zaoszczędziłbym sobie pół dnia. Dzięki i tak :) – nemmy

Odpowiedz

3

Dzięki blabb, który nauczył mnie, jak naprawić moje symbole i ponownie uruchomić analizę, powód mojej awarii stał się oczywisty. Niestety, sam już to przetłumaczyłem metodą prób i błędów (usunięcie elementów sterujących z jednej formy na raz, dopóki awaria się nie zakończyła). Oto linie zrzut awaryjny, który powiedział mi, co się dzieje:

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

Kompletny log wygląda nieskończonej pętli tej kontroli próbuje zbyć sobie. Porzuciłem kontrolę i teraz wszystko działa dobrze.

+1

Nie wiem, jak wygląda "pełny dziennik", ale z 'DllCanUnloadNow' z tak dużym przesunięciem, nie powiedziałbym, że kontrola jest sama w sobie. W takim przypadku nie można polegać na nazwie metody. Duże przesunięcie oznacza, że ​​program WinDbg nie może znaleźć symboli na serwerze firmy Microsoft dla tej biblioteki DLL. Wypróbuj 'lm m ciaXPLabel30', aby sprawdzić, czy nie masz symboli. Jest również mało prawdopodobne, aby kontrola była utylizowana zaraz po pierwszym zdarzeniu zmiany rozmiaru formularza, co o tym sądzisz? –