IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 17장. 구조적 예외처리(SEH) 기법

shine94 2025. 2. 25. 14:00

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr

 

https://www.inflearn.com/course/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/dashboard

 

[지금 무료]뇌를 자극하는 윈도우즈 시스템 프로그래밍 강의 | 한빛미디어 - 인프런

한빛미디어 | , [사진] 1. 강좌 소개 한빛미디어(주) 에서 발간한 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 의 저자 윤성우 님이 직접 강의하는 온라인 강좌입니다. 이미 여러 저서와 온라인

www.inflearn.com

 

 

 

 

* SEH(Structured Exception Handling)

   __try

   프로그램의 실제 흐름

   __except

   프로그램의 실제 흐름에 대한 예외처리 영역

 

* SEH는 __try 1개에 __except__finally 중에 1개 가능

   ㄴ [대신] try는 중첩 사용 가능

 

* 하드웨어 예외(Hardware Exception)와 소프트웨어 예외(Software Exception)

 

* 종료 핸들러(Termination Handler)

   프로그램이 정상적으로 실행되건,

   문제 발생에 의해서 종료가 될 상황에 놓이게 되건,

   무조건 실행하는 __finally 블록이 존재한다

__try
{
	// 코드블럭
}
__finally
{
	// 종료 처리 블록
}

 

* 종료 핸들러 활용처

   ① 파일 개방 후 닫아줘야 하는 작업

   ② 동적 할당 후 할당된 메모리 해제하는 작업

   ③ 뮤텍스를 소유한 쓰레드는 자신이 소유한 뮤텍스를 반드시 반환하는 작업

 

* 예외 핸들러(Exception Handler)

   예외상황 발생 시 선별적 실행

__try
{
	// 코드 블럭
}
__except (예외처리 방식)
{
	// 예외처리를 위한 코드 지역
}

 

* 예외 처리 방식

   EXCEPTION_EXECUTE_HANDLER
   EXCEPTION_CONTINUE_EXECUTION
   EXCEPTION_CONTINUE_SEARCH

 

* 자바는 다중 catch문을 지원하며,

   여러 종류의 예외를 명확하게 분기 처리가 가능

 

* SEH는 단일 __except 블록만 허용되며,

   이를 다중 분기로 나눌려면 예외 필터 함수(Filter Exception)을 통해 간접적으로 구현 필요

 

* 소프트웨어 기반의 개발자 정의 예외 → 소프트웨어 예외(Software Exceptions)의 발생

   하드웨어 예외는 결정되어 있으나, 소프트웨어 예외는 결정해야만 한다

   RaiseException 함수를  통해서 예외의 종류를 늘릴 수 있다

https://learn.microsoft.com/ko-kr/windows/win32/api/errhandlingapi/nf-errhandlingapi-raiseexception

 

RaiseException 함수(errhandlingapi.h) - Win32 apps

호출 스레드에서 예외를 발생시킵니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/debug/getexceptioncode

 

GetExceptionCode 매크로 - Win32 apps

발생하는 예외 형식을 식별하는 코드를 검색합니다. 이 함수는 필터 식 또는 예외 처리기의 예외 처리기 블록 내에서만 호출할 수 있습니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/debug/getexceptioninformation

 

GetExceptionInformation macro - Win32 apps

예외에 대한 컴퓨터 독립적 설명과 예외가 발생할 때 스레드에 대해 존재하는 컴퓨터 상태에 대한 정보를 검색합니다. 이 함수는 예외 처리기의 필터 식 내에서만 호출할 수 있습니다.

learn.microsoft.com

 

 

https://kblab.tistory.com/435

 

SEH (Structured Exception Handling)

SEH (Structured Exception Handling) __try, __except를 이용하는 방법을 말합니다. try에서 실제 처리할 코드를 넣어주고 except에서 예외가 발생했을 때 처리하는 코드를 넣어줍니다. 보통 코드를 작성을하면 i

kblab.tistory.com