[1. 개요]
윈도우 환경에서 C++ 애플리케이션 작성 시, 예외처리 방법을 정리한다.
- try ~ catch
- __try ~ __except (SEH)
- Unhandled Exception Filter
[2. try ~ catch]
- 표준 C++ 에서 제공하는 예외 처리 방법
- throw 키워드를 이용해 명시적으로 발생시킨 예외를 제어한다.
- catch 에서 예외를 전부 제어할 수 없는 경우, 비정상 종료가 발생한다.
[3. __try ~ __except]
- 윈도우 에서 제공하는 예외 처리 방법
# 리눅스에서는 사용 불가 (?) - SEH (=Structured Error Handling) 이라고 부른다.
[4. Unhandled Exception Filter]
[5. GetExceptionCode() ]
- 발생한 exception 의 유형을 식별할 수 있는 code 를 반환한다.
- 리턴 값 유형은 아래 링크를 참조한다.
[6. GetExceptionInformation() ]
- exception 이 발생한 thread 에 대해서 부가적인 상태등을 확인한다.
- 반환하는 구조체의 형태( =EXCEPTION_POINTER) 는 아래와 같다.
- EXCEPTION_RECORD
- CONTEXT_RECORD
CONTEXT_RECORD
- exception 이 발생했을 때 프로세서의 상태를 포함한다.
- 프로세서 레지스터 값.
# 범용 레지스터
=> eax, ebx, ecx, edx
# 스택 관련
=> ebp, esp
# 인덱스 관련
=> esi, edi
EXCEPTION_RECORD
- machine 에 관계 없는 exception 의 description 을 포함한다.
- ExceptionCode
# GetExceptionCode() 와 같음 - ExceptionFlags
# 흔하게 볼 수 있는 exception flag 는 아래와 같다.
# EXCEPTION_NONCONTINUABLE => 이번에 발생한 exception 은 더 이상 진행할 수 없는 exception 을 의미한다.
# EXCEPTION_SOFTWARE_ORIGINATE => system 사용을 위해 예약된 값 - ExceptionAddress
# exception 이 발생한 주소
# 주소를 포함하는 함수를 찾는 방법은 추후 정리하도록 한다. - NumberParameter
# exception 과 연간된 parameter 의 개수
# tionInformation 배열의 길이이다. - ExceptionInformation
# 대부분의 exception code 에 대해서 배열 내 값은 undefine 되어 있음.
# EXCEPTION_ACCESS_VIOLATION
# EXCEPTION_IN_PAGE_ERROR - *ExceptionRecord
# 중첩된 exception 이 발생했을 때, 다음 ExceptionRecord
[.. 참고자료]
'분류대기' 카테고리의 다른 글
swagger-editor 설치 (0) | 2024.06.12 |
---|---|
CUDA 설치하기, [윈도우, 리눅스] (0) | 2024.05.14 |
[내용 채워야 됨] CUDA 사용해보기 (0) | 2024.02.22 |
[좀 더 작성, 콜 스택 부분] Windows, c++, CallStack (0) | 2023.12.20 |