Visual Studio 2008에서 개발 환경이없는 Windows XP SP3 (x86) PC에서 충돌하는 C# .NET 3.5 응용 프로그램이 있습니다.WinDbg의 CLR .dmp 파일 분석
PC에서 .dmp 파일을 가져 와서 내 Windows 7 64 비트 개발 PC로 가져 와서 WinDbg 6.12로로드 할 수있었습니다.
그러나 C# 응용 프로그램에서 호출 스택의 코드를 볼 수 없습니다. 완전히 원시 호출 스택 인 것 같습니다.
는!analyze -v
의 결과는 아래와 같다.
는 또한 2008 년 비주얼 스튜디오 있습니다. 하지만 거기에 덤프 파일을 여는 것은 내 코드에서 가져온 것이 아니라 네이티브 호출 스택을 보여줍니다.
CLR 호출 스택을 어떻게 볼 수 있습니까?
0:004> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
kernel32!RaiseException+53
7c812afb 5e pop esi
EXCEPTION_RECORD: 0392f018 -- (.exr 0x392f018)
ExceptionAddress: 7c812afb (kernel32!RaiseException+0x00000053)
ExceptionCode: e0434f4d (CLR exception)
ExceptionFlags: 00000001
NumberParameters: 1
Parameter[0]: 80070057
PROCESS_NAME: foo.exe
ERROR_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>
EXCEPTION_PARAMETER1: 80070057
MOD_LIST: <ANALYSIS/>
MANAGED_STACK: !dumpstack -EE
No export dumpstack found
MANAGED_BITNESS_MISMATCH:
Managed code needs matching platform of sos.dll for proper analysis. Use 'x86' debugger.
ADDITIONAL_DEBUG_TEXT: Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD]
LAST_CONTROL_TRANSFER: from 79ef2bfc to 7c812afb
FAULTING_THREAD: ffffffff
DEFAULT_BUCKET_ID: STACKIMMUNE
PRIMARY_PROBLEM_CLASS: STACKIMMUNE
BUGCHECK_STR: APPLICATION_FAULT_STACKIMMUNE_NOSOS_CLR_EXCEPTION
STACK_TEXT:
00000000 00000000 foo.exe+0x0
SYMBOL_NAME: foo.exe
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: foo
IMAGE_NAME: foo.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 4d5da0cd
STACK_COMMAND: ** Pseudo Context ** ; kb
FAILURE_BUCKET_ID: STACKIMMUNE_e0434f4d_foo.exe!Unknown
BUCKET_ID: APPLICATION_FAULT_STACKIMMUNE_NOSOS_CLR_EXCEPTION_foo.exe
Followup: MachineOwner
---------
.NET 4.0을 사용하지 않는 관리되는 프로그램에 대한 Minidump 디버깅은 거의 기쁨이 아닙니다. 그것은 처리되지 않은 관리 예외에 폭탄을 투하했습니다. AppDomain.CurrentDomain.UnhandedException에 대한 이벤트 처리기를 작성하고 e.ExceptionObject.ToString() 값을 기록하거나 표시하여이를 진단 할 확률을 높입니다. 대다수의 경우에 문제의 원인을 진단 할만큼 충분히 좋습니다. –
@Hans - try/catch 블록에서 Program.cs의 코드를 래핑했지만이 이벤트는 훨씬 더 깔끔합니다. 고맙습니다. – PaulH