2009-09-22 9 views
1

C++/CLR에서 응용 프로그램을 작성했습니다. 네이티브 lib/dll을 사용합니다. 드물 긴하지만 내부 DLL을 내부적으로 손상시킵니다. 그런 다음 stacktrace를 얻지 만 관리되는 부분까지만 내부 네이티브 부분이 빠져 나옵니다. 전체 스택 트레이스를 표시 할 수있는 방법이 있습니까?충돌하는 혼합 모드 exe/dll에서 전체 스택 추적을 얻는 방법?

나는 다음과 같은 테스트를 만들었습니다. 네이티브 dll 안에 코드가 추가되어 항상 충돌을 일으켰습니다. exe를 doubleclicking하여 실행하면 이전과 같이 관리되는 부분의 스택 추적을 얻습니다. 디버거가 부착 된 VS2008에서 (단지 F5 키를 누름) 실행하면 충돌이 발생하여 전체 stacktrace, 관리되는 부분과 관리되지 않는 부분을 볼 수 있습니다.

액트 버트 버그가 드물게 발생하기 때문에 사용자가 VS를 통해 설치하지 않고 전체 스택 트레이스를 어떻게 든 표시하는 응용 프로그램에 뭔가를 추가하고 싶습니다. 그렇게 할 수있는 방법이 있습니까?

들으 마크

답변

0

시스 인 터널 프로세스 익스플로러 (http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx)를 사용하면 현재 실행중인 모든 프로세스의 스택을 볼 수 있습니다. 어쩌면 그것은 매우 비 사소한 ...

+0

이것은 분명히 흥미로운 프로그래밍이지만, 관리되는 응용 프로그램이든 네이티브 응용 프로그램이든 관계없이 충돌 한 스택의 스택을 보면 주 스레드의 다음 스택 추적을 얻을 수 있습니다. (다음 주석의 stacktrace 참조) 나를 도와주지 않습니다. :( – marc40000

+0

wow64cpu.dll! TurboDispatchJumpAddressEnd + 0x690 wow64cpu.dll! TurboDispatchJumpAddressEnd + 0xe3 wow64.dll! Wow64SystemServiceEx + 0x1ce wow64.dll! Wow64LdrpInitialize + 0x429 NTDLL.DLL! RtlResetRtlTranslations + 0x1b08 NTDLL.DLL! RtlResetRtlTranslations + 0xc63 NTDLL.DLL! LdrInitializeThunk + 0XE NTDLL.DLL! NtWaitForMultipleObjects + 0x15 KERNEL32.DLL! WaitForMultipleObjectsEx + 0x8e, 즉 KERNEL32.DLL!와 WaitForMultipleObjects + 0x18 KERNEL32.DLL! CheckForReadOnlyResource + 0x175 KERNEL32.DLL! CheckForReadOnlyResource + 0x212 KERNEL32 .dll! UnhandledExceptionFilter + 0x163 kernel32.dll! Unh andledExceptionFilter + 0xe0 – marc40000

+0

ntdll.dll! RtlKnownExceptionFilter + 0xb7 ntdll.dll! RtlInitializeExceptionChain + 0x36 – marc40000

0

을 당신을 도울 것입니다, 당신은 다음 링크를 추천 할 수 있습니다 :

Fast capture stack trace on windows/64-bit/mixed mode

Resolve managed and native stack trace - which API to use?

을하지만 밖으로 시도 것을 - 심지어 경우 이와 같은 스택 결정을 사용하십시오. 네이티브 측에서 예외가 발생하면 관리 측에 SEHException으로 전파되고 관리 측에서 제어를 받으면 부분적으로 콜 스택이 이미 손실됩니다. (기본 부분). 예외가 발생할 때마다 네이티브 호출 스택을 결정할 수는 있지만 여전히 기록해야합니다.

필요하면 프리랜서로이 작업을 수행 할 수 있습니다.