본문 바로가기

My Study/Function

GetExceptionCode

DWORD GetExceptionCode(void);

예외가 발생했을 때 어떠한 종류의 예외가 발생했는지를 확인하기 위해서 사용

example code)
__except(EXCEPTION_CONTINUE_HANDLER){
DWORD exptType = GetExceptionCode();

switch( exptType )
{
case EXCEPTION_ACCESS_VIOLATION:
_tprintf(_T(" Access violation \n\n"));
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
_tprintf(_T(" Divide by zero \n\n"));
break;
}
}

EXCEPTION_ACCESS_VIOLATION     (0xC0000005) 메모리 참조 오류를 구분하기 위해서 정의해 놓은 정수값
EXCEPTION_INT_DIVIDE_BY_ZERO  (0xC0000094) 정수를 0으로 나누는 예외를 너타내기 위해 정의해 놓은 정수값
EXCEPTION_BREAKPOINT            (0x80000003) 중단점 발생하면!

위 함수보다 더욱 자세하게 예외에 대한 내용을 알고 싶다면
LPEXCEPTION_POINTERS GetExceptionInformation(void);
함수를 호출한다.

구조체 주소를 리턴한다. EXCEPTION_POINTERS구조체를 봐보겠다.

typedef struct _EXCEPTION_POINTERS {
  PEXCEPTION_RECORD ExceptionRecord; //예외에 대한 정보가 담김
  PCONTEXT          ContextRecord; //프로세서의 레지스터 데이터를 비롯한 프로세서의 종속적인 정보
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode; //RaiseException함수의 첫번째 인자가 들어옴
  DWORD                    ExceptionFlags; //두번째 인자
  struct _EXCEPTION_RECORD *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters; //세번째 인자
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; //네번째 인자
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;

'My Study > Function' 카테고리의 다른 글

GetFileTime, FileTimeToSystemTime, SystemTimeToTzSpecificLocalTime  (0) 2010.02.25
RaiseException  (0) 2010.02.25
SetEvent  (0) 2010.02.25
ResetEvent  (0) 2010.02.25
CreateEvent  (0) 2010.02.25