4-17 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러
- 예외 처리
- SEH & 종료 핸들러
- 예외 핸들러
예외 처리
CPU의 예외 처리 정책
CPU는 미리 정의된 예외 상황에서 소프트웨어, OS 등이 동작하는 중간에 예외가 발생하면 정책에 따라 처리
-> CPU는 에외 상황이 발생하면 발생 여부만 알려주고 처리의 구체적인 방안은 소프트웨어가 결정
-> 소프트웨어는 예외 처리 핸들러를 마련 해놓고, 예외 발생시 예외 핸들러 동작
-> OS를 하드웨어에 넣는 시점에서 이미 예외 핸들러는 설정
하드웨어 예외
이미 결정되어 있는 CPU의 예외
-> 하드웨어 예외의 처리 결정권은 소프트웨어에게 있음
SEH & 종료 핸들러
SEH
Windows OS는 SEH(구조적 예외 기법) 매커니즘을 가지고 있음
-> 1. CPU에서 예외 발생
-> 2. CPU에서 OS로 예외 전달
-> 3. OS에서 애플리케이션으로 예외 전달, 동시에 예외 처리 방법도 같이 전달
-> OS가 애플리케이션에게 알려주는 예외 처리 방법 = SEH 매커니즘
SEH 매커니즘은 CPU 예외 + OS 예외 모두 처리
-> 예외의 시작점이 CPU : 하드웨어 예외
-> 예외의 시작점이 OS : 소프트웨어 예외
-> SEH는 애플리케이션단에서의 예외도 어느정도 처리 가능
예외 처리에 예시
ex) 예외 처리 잘못된 예시
ex) 예외 처리 개선된 예시
-> 프로그램의 실제 흐름과 흐름에 따른 예외 처리 영역을 분리하여 가독성 확보
예외 vs 에러
에러 : 컴파일 타임 오류(문법적), 치명적이며 반드시 수정 필요
예외 : 소프트웨어가 정한 상황을 벗어난 경우, 좋은 소프트웨어는 예외 발생 시 종료되지 않게 처리
종료 핸들러
__try, __finally로 구성
-> __try 구문이 하나라도 실행되었다면 __finally 블록 실행
예외 핸들러
예외 핸들러
try 블록과 except 블록으로 구성
-> 두 블록은 하나의 구문으로 이해 필요
-> try 블록에서 발생한 예외는 execpt 블록에서 처리
-> try 블록에서 예외 발생 시, execpt 블록으로 이동하여 예외 처리
except 블록에서 예외 처리 방식
1. EXCEPTION_EXECUTE_HANDLER
-> 예외 처리 후 execpt 블록을 실행하고, try에서 예외 발생 이후의 코드는 실행하지 않을 것
2. EXCEPTION_CONTINUE_EXECUTION
-> except 블록을 실행하지 않고 예외가 발생한 지점의 코드를 다시 실행
3. EXCEPTION_CONINUE_SEARCH
-> 예외가 발생하면 해당 함수를 리턴하고 상위 함수의 except에서 예외를 처리
예외 구분
'Study > Windows System Programming' 카테고리의 다른 글
[Window System Programming] Chapter 19. 비동기 I/O와 APC (1) | 2024.02.10 |
---|---|
[Window System Programming] Chapter 18. 파일 I/O와 디렉토리 컨트롤 (1) | 2024.01.21 |
[Window System Programming] Chapter 16. 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리 (0) | 2024.01.20 |
[Window System Programming] Chapter 15. 스레드 풀링(Pooling) (0) | 2024.01.20 |
[Window System Programming] Chapter 14. 이벤트 기반 동기화 / 타이머 기반 동기화 (0) | 2024.01.20 |