C++에서 SEH로 잡아 낼 수 없는 예외를 처리하기

C++에선 Structured Exception Handling(SEH)을 이용하면 대부분의 예외를 처리할 수 있는데, 몇몇 경우는 처리되지 않고 프로그램이 그냥 종료될 때가 있습니다. 다음은 그런 예외를 추가로 잡아 내는 예입니다. 이것 말고도 예외 처리가 더 필요한지는 잘 모르겠습니다.

#include "stdafx.h"
#include <signal.h>
#include <windows.h>

void raise_exception()
{
	RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, NULL);
}

void handle_invalid_parameter(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved)
{
	raise_exception();
}

void handle_pure_virtual_function_call()
{
	raise_exception();
}

void handle_interrupt_signal(int signal)
{
	raise_exception();
}

int _tmain(int argc, _TCHAR* argv[])
{
	_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
	_set_invalid_parameter_handler(handle_invalid_parameter);
	_set_purecall_handler(handle_pure_virtual_function_call);
	signal(SIGABRT, handle_interrupt_signal);

	return 0;
}
Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중