2014-03-28 3 views
3

분석 할 크래시 미니 덤프가 있습니다. 내 프로그램은 멀티 스레드 Qt5 응용 프로그램입니다. 나는 디버깅 전문가는 아니지만 보통 프로그램이 실패한 곳을 쉽게 찾을 수 있지만 이번에는 할 수 없습니다. Visual Studio 2010에서 덤프 파일을 열어서 "Debug with native only"를 클릭하면 문제가있는 위치가 나에게 표시됩니다. "__CxxUnhandledExceptionFilter"위치의 스레드입니다. 호출 스택은 다음과 같습니다.크래시 덤프 분석 : CxxUnhandledExceptionFilter

msvcr100.dll()!_abort() 
msvcr100.dll()!terminate() 
program.exe!__CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS * pPtrs) 
KERNELBASE.dll!_UnhandledExceptionFilter() 
ntdll.dll!__RtlUserThreadStart() 
ntdll.dll!__RtlUserThreadStart() 

프로그램 기능 및 Qt 내부 기능이있는 스택이 필요합니다. 그러나이 호출 스택은 나에게 아무런 재미가 없다고 알려줍니다. 그래서 "ExceptionFilter"가 무엇인지 알려주십시오. 프로그램이 실제로 실패한 곳을 어떻게 찾을 수 있습니까?

답변

3

처리되지 않은 예외가 이미 기본 예외 필터에 의해 포착 된 지점에서 응용 프로그램을보고 있습니다.

즉, 예외가 발생한 행이 표시되지 않습니다.

불행히도 미니 덤프에는 유용한 정보가 없을 가능성이 있습니다.

_EXCEPTION_POINTERS 구조체를 검사 해보십시오. 처리되지 않은 예외를 트리거 한 지침의 EIP이 포함될 수 있습니다.

pPtrs->ExceptionRecord->ExceptionAddress의 값을 참조하십시오.이 값은 EIP이어야합니다. MSDN에서

:

ExceptionAddress : 예외가 발생한 어드레스.

예외가 발생한 지점에서 스택 추적을 얻으려면 http://support.microsoft.com/kb/313109을 읽으십시오.

+0

와우, 당신은 너무 빨리, 감사 답변 :) 예외 주소는 _RaiseException @ 16 함수임을 알 수 있듯이 kernelbase.dll을 가리 킵니다. 커널 결함입니까? – YuriM

+0

@YuriM 롤,별로 가능성이 없습니다. 아마 잘못된 인수를 WinApi 함수에 넘겼거나 호출 한 코드를 입력했을 것입니다. 이러한 함수는 온 전성 검사를 수행하고 데이터가 마음에 들지 않으면 예외를 throw합니다. 나머지 주장을 조사 했니? 구조에 호출 스택 레코드가있을 수 있습니다. – sashoalm

+0

나는 다음 주에 나중에 할 것입니다. – YuriM