일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Unity
- 넥스트에디션
- 필활
- 개발
- 홍대 방탈출
- 방탈출 추천
- 2021 방탈출 추천
- 방탈출
- 윈도우 프로그래밍
- 정렬 알고리즘
- 꽃길
- 강남 방탈출
- 이스케이퍼스
- 방탈출 후기
- 홍대 방탈출 추천
- 이스케이퍼스 2호점
- 홍대 덤앤더머
- 추천
- 방탈출 리뷰
- 후기
- 시스템 프로그래밍
- C++ 자료구조
- 공포 방탈출
- Android
- 유니티
- PC VR
- 넥스트에디션 2호점
- C 자료구조
- C#
- 홍대
- Today
- Total
행복한 연어의 이야기
(윈도우 시스템) 17. 구조적 예외처리(SEH) 기법 본문
1. SEH (Structured Exception Handling)
"프로그램 실행시 발생하는 문제점 대부분을 예외라고 인식하자."
SEH 는 성능을 약간 저하시킨다.
성능을 중요시하는 서버 프로그래밍에서 문제가 될수 있지만
서버 프로그래밍에서는 시스템 호환성을 위해 SEH 를 사용하지 않는다.
하드웨어적 예외와 소프트웨어적 예외
하드웨어 예외란 하드웨어에서 인식하고 알려주는 예외소프트웨어 예외는 소프트웨어에서 감지하는 예외이다.
2. 종료 핸들러(Termination Handler)
종료 핸들러의 구성과 동작 원리
__try
{
//코드 블록
}
__finally
{
//종료 처리 블록
}
__try __finally 은 __try 문을 한줄이라도 실행하게 되면 __finally 문을 실행한다.
__try 문을 빠져나오는 대표적인 상황은 break, continue, return, goto, 예외 가 있다.
프로세스 강제 종료나 쓰레드 강제 종료는 __finally 문으로 들어오지 않는다.
보통 파일개방시, 커널 오브젝트 핸들 반환시 등에 사용된다.
3. 예외 핸들러(Exception Handler)
예외 핸들러의 구성과 동작 원리
__try
{
//코드 블록(예외 발생 경계 지역)
}
__exception (예외처리 방식)
{
//예외 처리 블록
}
__try __exception 은 __try 문에서 예외처리가 발생하게 되면 __exception 문을 실행한다.
__exception(예외처리 방식)에서 예외처리 메커니즘을 어떤방식으로 할지 정할 수 있다. (기본적으로 3가지가 있다.)
예외상황에 따라 예외처리를 하고 싶다면__exception 내에서 GetExceptionCode 함수를 호출하면 알수 있다.
예외처리가 발생했을때 A 함수내 예외처리문이 없으면 A 함수는 종료되고 (스택 프레임 반환)
A함수를 호출한 B 함수로가서 예외처리문이 있는지 검사한다.
이렇게 계속 진행이 되며 예외처리문이 없으면 main 함수까지, main에도 없으면 main 함수도 반환하며
프로그램이 종료하게 된다.
*__try __exception 문은 Windows 에서 제공하는 예외처리 문,
try catch 문은 C++ 에서 제공하는 예외처리 문이다.
try catch 문은 내부적으로 __try __exception 로 구성되어 있다.
4. 소프트웨어 기반의 개발자 정의 예외
소프트웨어 예외의 발생
하드웨어 예외는 하드웨어가 디자인 될 당시에 결정되고 예외의 종류 추가는 불가능하다.
소프트웨어는 소프트웨어가 디자인될 당시 결정되기에 예외의 종류 추가가 가능하다.
소프트웨어 예외를 발생시키는 다음 함수를 통해 예외의 종류를 늘릴 수 있다.
void RaiseException(
DWORD dwExceptionCode, //발생시킬 예외의 형태
DWORD dwExceptionFlage, //예외발생 이후 실행방식에 제한을 둘때 사용
DWORD nNumberOfArgument, //추가 정보의 개수
const ULONG_PTR* lpArguments //추가 정보
)
첫번째 인자 dwExceptionCode 는 GetExceptionCode 함수를 호출할 때 얻게 되는 값을 지정한다고 생각하면 된다.
알고 넘어가야할 것
1. SEH가 가져다 주는 이점
2. 종료 핸들러의 동작 원리와 적용 범위에 대한 이해
3. 대표적인 예외처리 방식
4. 처리되지 않는 예외의 이동
5. 과도한 SEH 는 좋지 않다.
'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.
'IT > 윈도우 시스템 프로그래밍' 카테고리의 다른 글
(윈도우 시스템) 19. 비동기 I/O와 APC (0) | 2021.08.27 |
---|---|
(윈도우 시스템) 18. 파일 I/O와 디렉터리 컨트롤 (0) | 2021.08.25 |
(윈도우 시스템) 16. 컴퓨터 구조 네번째 (0) | 2021.08.20 |
(윈도우 시스템) 14. 쓰레드 동기화 기법 2 (실행순서의 동기화) (0) | 2021.08.18 |
(윈도우 시스템) 13. 쓰레드 동기화 기법 1 (메모리 접근에 대한 동기화) (0) | 2021.08.16 |