http://3dmpengines.tistory.com/614 에도 SEH 에 대해 올린글이 있음
일반적으로 운영체제(os) 단위에서 발생하는 예외로는 null pointer 참조나 0나누기를 들 수 있다. 이런 운영체제 단위의 예외를 처리하고 싶을 때 c++에서 사용하는 예외처리기가 아닌 os 단위의 예외처리기를 사용해야 한다.
__try, __except, __finally의 기본적인 문법은 다음과 같다.
여기서 주의해야 할 점은 __except와 __finally는 하나의 __try블록에 같이 쓸 수 없다는 점이다.
__except 안에 들어가는 예외 필터에는 다음과 같이 3가지가 있다. EXCEPTION_EXECUTE_HANDLER EXCEPTION_CONTINUE_SEARCH EXCEPTION_CONTINUE_EXECUTION
* EXCEPTION_EXECUTE_HANDLER
예외가 발생한 지점에서 빠져나와 __except 안에있는 루틴을 실행한다. __except 안에 있는 루틴의 실행이 끝나면 계속해서 다음 루틴을 실행해 나간다.
* EXCEPTION_CONTINUE_SEARCH
예외가 발생한 지점에서 빠져나와 call stack에서 다음 __try 블록을 찾는다. 만약 __try를 못찾으면 kernel에게 예외가 보내지고 에러메시지와 함께 application이 비정상종료하게 된다.
* EXCEPTION_CONTINUE_EXECUTION
예외가 발생한 지점을 다시 실행한다. 만약 다시 실행할 때 문제가 해결된 상태가 안된다면 무한 루프를 돌게 된다.
이 3가지 예외 필터의 순서도를 그려보면 다음과 같다.
|
http://ezbeat.tistory.com/122
'운영체제 & 병렬처리 > 시스템프로그래밍' 카테고리의 다른 글
WaitForSingleObject 함수 (0) | 2012.12.27 |
---|---|
예외 처리 - 최후 에러코드, GetLastError, __try __catch, 내재 함수, GetExceptionCode, GetExceptionInformation ,종료 핸들러, __try __except __finally (0) | 2012.12.26 |
ESP 와 EBP (0) | 2012.12.15 |
Shared Lock(공유 잠금), Exclusive Lock(독점 잠금) (0) | 2012.12.14 |
메모리 컨트롤 (0) | 2012.11.01 |