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 함수를 통해 예외알림을 추가할 수 있다.
|
'독후감 > 컴퓨터구조+운영체제+시스템프로그래밍' 카테고리의 다른 글
19. 비동기 I/O와 APC (0) | 2017.03.13 |
---|---|
18. 파일 I/O와 디렉터리 컨트롤 (0) | 2017.03.13 |
16. 컴퓨터구조에 대한 네번쨰 이야기 - Part4 메모리 관리와 I/O (2) | 2017.03.11 |
15. 쓰레드 풀링(Pooling) (0) | 2017.03.11 |
14. 쓰레드 동기화 기법2 (0) | 2017.03.11 |