WinCNT

Exception Filter 본문

게임 프로그래밍(학습 내용 정리)/시스템 프로그래밍

Exception Filter

WinCNT_SSS 2022. 3. 22. 11:36

참고 사이트)

https://ozt88.tistory.com/48

 

Exception Filter

Exception Filter Exception이란 내 생각엔 버그다. 프로세스가 정상적인 동작을 할 수 없을 때, 예외 이벤트가 발생하여 운영체제에서 프로세스를 강제 종료시켜버린다. 좀 규모가 있는 프로그램을 만

ozt88.tistory.com

 

Exception Filter의 예제 코드

#include <Windows.h>
#include <tchar.h>
#include "dbghelp.h"
#pragma comment(lib, "Dbghelp.lib")

LONG WINAPI MyExceptionFilter(struct _EXCEPTION_POINTERS* pExceptionInfo);

int main()
{
	// 함수 포인터를 등록해준는 함수
	SetUnhandledExceptionFilter(MyExceptionFilter);

	// 예외를 발생 시키는 코드
	int* pInt = nullptr;
	int n = *pInt;
}

LONG WINAPI MyExceptionFilter(struct _EXCEPTION_POINTERS* pExceptionInfo)
{
	// test.dmp라는 파일을 만들 것
	HANDLE hFile = CreateFile(_T("test.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

	// 밑의 구조체를 서술한다
	MINIDUMP_EXCEPTION_INFORMATION stExceptionParam;
	stExceptionParam.ThreadId = GetCurrentThreadId();		// GetCurrentThreadId()가 쓰인다
	stExceptionParam.ExceptionPointers = pExceptionInfo;
	stExceptionParam.ClientPointers = FALSE;

	// 
	MiniDumpWriteDump(
		GetCurrentProcess(),		// 현재 프로세스의 핸들(슈도 핸들)
		GetCurrentProcessId(),		// 현재 프로세스의 ID
		hFile,
		MiniDumpWithFullMemory,
		&stExceptionParam,
		NULL, NULL
	);
	CloseHandle(hFile);

	return EXCEPTION_EXECUTE_HANDLER;
}

 

 

 

SSS