Crash Analyse bei mixed Native/Managed Code...

13/11/2009 - 09:08 von Diana | Report spam
Hallo,

habe ein umfangreiches Programm, welches vor vielen Jahren mit der MFC
realsiert wurde (native), wobei aber einiges an neuer Funktionalitàt Managed
(C# oder C++) ergànzt wurde. Es gibt einen globalen Exception Handler, der im
Crash Fall einen Dump erzeugt. War der Crash im Native Code, liefert der Dump
die nötigen Infos, war der Crash aber im Managed Code, liefert der Dump
keinen Stack Trace, der in den Managed Code rein reicht. Die Analyse mit
WinDbg liefert z.B. so etwas: (siehe Anhang, kernel32 Exception).

Es sieht danach aus, als könnte aus der Managed Welt kein Stack Trace an den
unmanaged Exception Handler übergeben werden, weil das nicht kompatibel ist.
Meine Frage wàre, was kann ich tun, um mehr Informationen über den Absturtz
zu erhalten? Kann man an die CLR einen zweiten globalen Exception Handler
anhàngen, der alle Abstürtze aus dem Managed Code behandelt, wenn ja, wie?

Gruß

Diana

FAULTING_IP:
kernel32!RaiseException+53
7c812a5b 5e pop esi

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7c812a5b (kernel32!RaiseException+0x00000053)
ExceptionCode: e0434f4d (CLR exception)
ExceptionFlags: 00000001
NumberParameters: 1
Parameter[0]: 80070057

DEFAULT_BUCKET_ID: CLR_EXCEPTION

PROCESS_NAME: test.exe

ERROR_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>

EXCEPTION_PARAMETER1: 80070057

MANAGED_STACK: !dumpstack -EE
Doesn't work with 2.x

FAULTING_THREAD: 00000258

PRIMARY_PROBLEM_CLASS: CLR_EXCEPTION

BUGCHECK_STR: APPLICATION_FAULT_CLR_EXCEPTION_WRONG_SYMBOLS

LAST_CONTROL_TRANSFER: from 79f97065 to 7c812a5b

STACK_TEXT:
0474f684 79f97065 e0434f4d 00000001 00000001 kernel32!RaiseException+0x53
WARNING: Stack unwind information not available. Following frames may be
wrong.
0474f6e4 7a0945a4 01c14eec 00000000 00000000 mscorwks+0x127065
0474f7a8 793a3d8d 01c14eec 0181a310 79622b69 mscorwks+0x2245a4
0474f7ac 01c14eec 0181a310 79622b69 0000046d mscorlib_ni+0x2e3d8d
0474f7b0 0181a310 79622b69 0000046d 01c13570 0x1c14eec
0474f7b4 79622b69 0000046d 01c13570 01ab4968 0x181a310
0474f7b8 00000000 01c13570 01ab4968 01abc620 mscorlib_ni+0x562b69


STACK_COMMAND: ~5s; .ecxr ; kb

FOLLOWUP_IP:
mscorwks+127065
79f97065 ?? ???

SYMBOL_STACK_INDEX: 1

SYMBOL_NAME: mscorwks+127065

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: mscorwks

IMAGE_NAME: mscorwks.dll

DEBUG_FLR_IMAGE_TIMESTAMP: 4333e7ec

FAILURE_BUCKET_ID: CLR_EXCEPTION_e0434f4d_mscorwks.dll!Unknown

BUCKET_ID: APPLICATION_FAULT_CLR_EXCEPTION_WRONG_SYMBOLS_mscorwks+127065

WATSON_STAGEONE_URL:
http://watson.microsoft.com/StageOn...Retriage=1

Followup: MachineOwner
 

Lesen sie die antworten

#1 Immo Landwerth
13/11/2009 - 10:24 | Warnen spam
Diana wrote:

habe ein umfangreiches Programm, welches vor vielen Jahren mit der MFC
realsiert wurde (native), wobei aber einiges an neuer Funktionalitàt Managed
(C# oder C++) ergànzt wurde. Es gibt einen globalen Exception Handler, der im
Crash Fall einen Dump erzeugt. War der Crash im Native Code, liefert der Dump
die nötigen Infos, war der Crash aber im Managed Code, liefert der Dump
keinen Stack Trace, der in den Managed Code rein reicht. Die Analyse mit
WinDbg liefert z.B. so etwas: (siehe Anhang, kernel32 Exception).

Es sieht danach aus, als könnte aus der Managed Welt kein Stack Trace an den
unmanaged Exception Handler übergeben werden, weil das nicht kompatibel ist.
Meine Frage wàre, was kann ich tun, um mehr Informationen über den Absturtz
zu erhalten? Kann man an die CLR einen zweiten globalen Exception Handler
anhàngen, der alle Abstürtze aus dem Managed Code behandelt, wenn ja, wie?



Ich bin kein Experte im Crash Debugging, aber ich weiß, dass es laut Jon
Langdon (CLR PM für Debugging) problematisch sein kann, wenn der Crash
Dump aus dem sterbenden Prozess heraus angestoßen wird.

Habe ich Dich richtig verstanden, dass der Crash Dump aus Deiner .exe
geschrieben wird?

WATSON_STAGEONE_URL:
(Url gekürzt)



...oder verwendet Ihr einfach nur Windows Error Reporting (AKA Watson)?

MANAGED_STACK: !dumpstack -EE
Doesn't work with 2.x



Das ist seltsam...

Immo Landwerth

Ähnliche fragen