Verständnis WinDbg Ausgang
Ich habe eine Winform-Anwendung (C#), die Importe einige Funktionen aus der dll.
Manchmal, wenn Sie die Anwendung ausführen, bekomme ich die folgende exception:
System.AccessViolationException: Versucht, Lesen oder schreiben von geschütztem Speicher.
Dies ist Häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Fang ich es in AppDomain.CurrentDomain.UnhandledException
.
Also habe ich versucht zu Debuggen mit WinDbg. Ich war in der Lage, um die Ausnahme zu fangen und erhalten die folgende Ausgabe:
!analysieren -v
FAULTING_IP:
KERNEL32!SetErrorMode+14b
77e6c427 8a08 mov cl,byte ptr [eax]
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 77e6c427 (KERNEL32!SetErrorMode+0x0000014b)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 087deadc
Attempt to read from address 087deadc
FAULTING_THREAD: 00000b1c
PROCESS_NAME: App.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".
EXCEPTION_PARAMETER1: 00000000
EXCEPTION_PARAMETER2: 087deadc
READ_ADDRESS: 087deadc
FOLLOWUP_IP:
KERNEL32!SetErrorMode+14b
77e6c427 8a08 mov cl,byte ptr [eax]
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK: !dumpstack -EE
OS Thread Id: 0xb1c (34)
Current frame:
ChildEBP RetAddr Caller,Callee
ADDITIONAL_DEBUG_TEXT: Followup set based on attribute [UnloadedModule_Arch_AX] from Frame:[0] on thread:[b1c] ; Enable Pageheap/AutoVerifer
DEFAULT_BUCKET_ID: HEAP_CORRUPTION
PRIMARY_PROBLEM_CLASS: HEAP_CORRUPTION
BUGCHECK_STR: APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ
LAST_CONTROL_TRANSFER: from 7a0aa797 to 77e6c427
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
08bddc6c 7a0aa797 00000000 00000001 087deadc KERNEL32!SetErrorMode+0x14b
08bddd68 7c82a124 056306e8 08bddf9c 7c82a0b8 mscorwks!CorLaunchApplication+0x281f8
08bddd74 7c82a0b8 7c82a0fc 00000001 00000004 ntdll!RtlpAllocateFromHeapLookaside+0x13
08bddf9c 00000000 00000000 00000000 00000000 ntdll!RtlAllocateHeap+0x1dd
STACK_COMMAND: .ecxr ; ~~[b1c] ; .frame 0 ; ~34s ; kb
SYMBOL_NAME: ure.dll!Unloaded
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ure.dll
IMAGE_NAME: ure.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 750063
FAILURE_BUCKET_ID: HEAP_CORRUPTION_c0000005_ure.dll!Unloaded
BUCKET_ID: APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ_ure.dll!Unloaded
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/App_exe/1_2009_403_12/49e707a9/KERNEL32_dll/5_2_3790_4062/46264680/c0000005/0002c427.htm?Retriage=1
Followup: MachineOwner
Was bedeutet das? und was soll ich tun?
Dank im Voraus für etwaige Tipps!!
InformationsquelleAutor Anya | 2009-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie
ure.dll
entladen wurde, und ein Aufruf vonNlsAnsiToUnicodeMultiByteToWideChar (), die sich auf ihn ausfallen wird. Man könnte.symfix
vor!analyze -v
zu bestätigen.Ist, dass die DLL, die Sie importieren? Wenn nicht, müssen Sie Speicher Korruption. Ansonsten ist der bug wohl in die DLL. Sind Sie mit P/Invoke, um es zu importieren?
Yup, das entladen von DLL-Informationen beschädigt wurde. Wie Sie vielleicht erraten, es ist .NET
culture.dll
, und Windbg ist das Lesen der 'Kult' - Teil, wie den Zeitstempel und Prüfsumme. Versuchen Sie einen Neustart und dabei die folgenden:und wenn der Haltepunkt trifft:
(Das sagt Windbg ausgeführt werden, wenn die DLL entladen wird und dann der dump-stack)
Laufen ein bisschen, damit das Modul zu entladen, und führen Sie folgenden Befehl aus. Dann lassen Sie Windbg laufen, bis Sie die Ausnahme, und machen Sie diesen Befehl wieder zu vergleichen:
(Das ist der Anfang der unbelasteten Modul-Tabelle, die ist immer beschädigt.)
ach ja nicht erkennen! An welcher Stelle muss ich diese Befehle? direkt nach exception cought? vor der Analyse? nach? bevor Sie gehen? Vielen Dank!:)
bevor die exception gefangen wurde.
Mark, die Befehle ausführen. Und kb gibt mir die folgende: ChildEBP RetAddr Args Kind WARNUNG: Stapel entspannen Informationen nicht zur Verfügung. Folgende frames kann wrong. 0dc9dc6c 7a0aa797 00000000 00000001 0522ea5c KERNEL32!SetErrorMode+0x14b 0dc9dd68 7c82a124 056306e8 0dc9df9c 7c82a0b8 mscorwks!CorLaunchApplication+0x281f8 0dc9dd74 7c82a0b8 7c82a0fc 00000001 00000004 ntdll!RtlpAllocateFromHeapLookaside+0x13 0dc9df9c 00000000 00000000 00000000 00000000 ntdll!RtlAllocateHeap+0x1dd
aber nachdem ich run-analyze - v", es immer noch sagt mir *** WARNUNG: kann Nicht überprüfen Zeitstempel für ure.dll *** FEHLER: Modul Last abgeschlossen, aber Symbole konnte nicht geladen für ure.dll
InformationsquelleAutor Mark