c++에서 unhandle exception control 하는 경우
SetUnhandledExceptionFilter()
함수에 LONG WINAPI my_top_level_filter(__in PEXCEPTION_POINTERS pExceptionPointer) 형태의 callback pointer를 전달 합니다.
SetUnhandledExceptionFilter(my_top_level_filter);
callback함수 안에서는 minidump
파일을 생성하여 write 해두면 추후 !analyze -v
를 통해 쉽게 stack trace가 가능 합니다.
아래는 간단한 mini dump 예제 입니다.
MINIDUMP_EXCEPTION_INFORMATION MinidumpExceptionInformation; PEXCEPTION_RECORD pExceptionRecord = pExceptionPointer->ExceptionRecord; MinidumpExceptionInformation.ThreadId = ::GetCurrentThreadId(); MinidumpExceptionInformation.ExceptionPointers = pExceptionPointer; MinidumpExceptionInformation.ClientPointers = FALSE; HANDLE hDumpFile = ::CreateFileW(dump_filename.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &MinidumpExceptionInformation, NULL, NULL); ::TerminateProcess(::GetCurrentProcess(), 0);