1. SEH(Stuctured Exception Handling)

* 예외처리의 필요성

: 프로그램이 동작하는 부분과 흐름에 대한 예외처리 하는 부분을 구분하여 볼 수 있기 때문에 편리하다.

* 예외와 에러의 차이점

: 프로그램 실행 시 발생하는 문제점 대부분을 예외라고 인식해야 한다

: 예외 처리 가능하도록 프로그램을 구현해야 한다.

* 하드웨어 예외와 소프트웨어 예외

: 하드웨어 예외란 하드웨어에서 인식하고 알려주는 예외
    ex) 10 / 0 을 연산할 때 CPU가 운영체제에게 예외가 발생핬다는 것을 알린다.

: 소프트웨어 예외는 하드웨어에서 감지하는 예외이다.

: 하드웨어의 예외는 늘릴 수 없지만, 소프트웨어의 예외사항은 늘릴 수 있다.

2. 종료 핸들러(Termination Handler)

: SEH(Structured Exception Handling) 구조적 예외처리 메커니즘은 성능을 약간 저하 시키기 때문에, 서버프로그래밍에서는 사용하지 않는다.

: 종료 핸들러(Termination Handler)와 예외 핸들러(Exception Handler)로 나뉜다.

* 종료 핸들러의 기본 구성과 동작 원리

: _try 블록을 한줄이라도 실행하게 되면, 반드시 _finally 블록을 실행해야 한다.

: _try에서 return을 하더라도, 프로그램이 종료되기 전에 _finally 블록은 실행된다.

: _try 구문을 빠져나오게 하는 대표적 상황이다. {return, continue, break, goto, "예외"}

: 프로세스나 쓰레드의 강제종료일 떄에는 실행되지 않는다.

* 종료 핸들러 활용사례 연구 1

: 파일을 개방했을 때 무조건 닫아줘야 손실을 막을 수 있다.

: 메모리 동적할당시 해제 해주어야 한다.

* 종료 핸들러 활용 사레 연구 2

: 뮤텍스를 반환해야 할때.

3. 예외 핸들러(Exception Handler)

: 예외상황 발생 시 선별적으로 실행한다

* 예외 핸들러와 필터 (Exception Handler & Filters)

: _try 블록에서 예외가 발생했을 때, _except(예외필터) 블록에서 이 상황을 처리하게 된다. 

: 이 때 예외 필터를 통해 예외처리 메커니즘을 어떻게 동작시킬지 결정할 수 있다. 

: 예외상황 이후의 라인을 실행 시키지 않을 수도있고 실행 시킬 수도있다. (EXCEPTION_EXECUTE_HANDLER)

: 예외 핸들러를 사용하면 프로그램이 강제종료 되지 않는다.

* 예외 핸들러의 활용 사례 연구

: 예외 처리 이후의 실행위치를 결정할 수 있다.

* 처리되지 않은 예외의 이동

: 예외 처리가 되지 않은 블록일 경우 상위 블록에 예외처리가 있는지 스택 구조상 아래로 이동하고 해당 스택 프레임은 반환된다.

: main 함수내에서도 예외 처리할 수 없다면 프로그램이 종료된다.

* 핸들러의 중복

: 예외 핸들러는 예외 핸들러끼리 중복이 가능하고 종료 핸들러와도 중복이 가능하다.

* 정의되어 있는 예외의 종류와 예외를 구분하는 방법

: _except 블록 안에서 GetExceptionCode함수를 통해 예외의 종류를 확인할 수 있다.

* EXCEPTION_CONTINUE_EXECUTION & EXCEPTION_CONTINUE_SEARCH

: EXCEPTION_CONTINUE_EXECUTION 은 예외 발생시 다시 그 곳으로 가서 실행을 이어나가는 방식이다.

: EXCEPTION_CONTINUE_SEARCH 은 예외 발생시 다른 곳의 예외처리를 따르게 하는 방식이다.

4. 소프트웨어 기반의 개발자 정의 예외

: 개발자는 소트프웨어 예외에 해당하는 예외상황을 정의 및 추가할 수 있다.

* 소프트웨어 예외(Software Exceptions) 발생

: RaiseException 함수를 통해 예외알림을 추가할 수 있다.


뇌를 자극하는 윈도우즈 시스템 프로그래밍
국내도서
저자 : 윤성우
출판 : 한빛미디어 2007.03.30
상세보기


+ Recent posts