GetExceptionCode 매크로
발생하는 예외 형식을 식별하는 코드를 검색합니다. 이 함수는 필터 식 또는 예외 처리기의 예외 처리기 블록 내에서만 호출할 수 있습니다.
참고
Microsoft C/C++ 최적화 컴파일러는 이 함수를 키워드로 해석하며 적절한 예외 처리 구문 외부에서 함수를 사용하면 컴파일러 오류가 발생합니다.
구문
DWORD GetExceptionCode(void);
매개 변수
이 매크로에는 매개 변수가 없습니다.
반환 값
반환 값은 예외 형식을 식별합니다. 다음 표는 일반적인 프로그래밍 오류로 인해 발생할 수 있는 예외 코드를 식별합니다. 이러한 값은 WinBase.h 및 WinNT.h에 정의되어 있습니다.
반환 코드 | 설명 |
---|---|
|
스레드는 액세스할 수 없는 가상 주소에서 읽거나 쓰기를 시도합니다. 이 값은 STATUS_ACCESS_VIOLATION으로 정의됩니다. |
|
스레드는 범위를 벗어난 배열 요소에 액세스하려고 시도하며 기본 하드웨어는 범위 검사를 지원합니다. 이 값은 STATUS_ARRAY_BOUNDS_EXCEEDED로 정의됩니다. |
|
중단점이 발생했습니다. 이 값은 STATUS_BREAKPOINT로 정의됩니다. |
|
스레드는 정렬을 제공하지 않는 하드웨어에서 잘못 정렬된 데이터를 읽거나 쓰려고 시도합니다. 예를 들어, 16비트 값은 2바이트 경계에 정렬되어야 하고 32비트 값은 4바이트 경계에 정렬되어야 합니다. 이 값은 STATUS_DATATYPE_MISALIGNMENT로 정의됩니다. |
|
부동 소수점 연산의 피연산자 중 하나가 비정규입니다. 비정규 값은 표준 부동 소수점 값으로 표현하기에는 너무 작은 값입니다. 이 값은 STATUS_FLOAT_DENORMAL_OPERAND로 정의됩니다. |
|
스레드는 0(영)의 부동 소수점 제수로 부동 소수점 값을 나누려고 시도합니다. 이 값은 STATUS_FLOAT_DIVIDE_BY_ZERO로 정의됩니다. |
|
부동 소수점 연산의 결과는 정확히 소수로 나타낼 수 없습니다. 이 값은 STATUS_FLOAT_INEXACT_RESULT로 정의됩니다. |
|
이 목록에 포함되지 않은 부동 소수점 예외입니다. 이 값은 STATUS_FLOAT_INVALID_OPERATION으로 정의됩니다. |
|
부동 소수점 연산의 지수가 해당 형식에서 허용하는 크기보다 큽니다. 이 값은 STATUS_FLOAT_OVERFLOW로 정의됩니다. |
|
부동 소수점 연산으로 인해 스택이 오버플로 또는 언더플로되었습니다. 이 값은 STATUS_FLOAT_STACK_CHECK로 정의됩니다. |
|
부동 소수점 연산의 지수는 해당 형식에서 허용하는 크기보다 작습니다. 이 값은 STATUS_FLOAT_UNDERFLOW로 정의됩니다. |
|
스레드가 PAGE_GUARD 한정자로 할당된 메모리에 액세스했습니다. 이 값은 STATUS_GUARD_PAGE_VIOLATION으로 정의됩니다. |
|
스레드가 잘못된 명령을 실행하려고 합니다. 이 값은 STATUS_ILLEGAL_INSTRUCTION으로 정의됩니다. |
|
스레드가 존재하지 않는 페이지에 액세스하려고 시도하고 시스템이 페이지를 로드할 수 없습니다. 예를 들어, 네트워크를 통해 프로그램을 실행하는 동안 네트워크 연결이 끊어지면 이 예외가 발생할 수 있습니다. 이 값은 STATUS_IN_PAGE_ERROR로 정의됩니다. |
|
스레드는 정수 값을 0의 정수 수로 나누려고 시도합니다. 이 값은 STATUS_INTEGER_DIVIDE_BY_ZERO로 정의됩니다. |
|
정수 연산의 결과는 너무 커서 대상 레지스터에서 보유할 수 없는 값을 만듭니다. 경우에 따라 결과의 최상위 비트가 수행됩니다. 일부 작업은 캐리 플래그를 설정하지 않습니다. 이 값은 STATUS_INTEGER_OVERFLOW로 정의됩니다. |
|
예외 처리기는 예외 디스패처에 잘못된 처리를 반환합니다. C와 같은 고급 언어를 사용하는 프로그래머는 이 예외가 발생하지 않아야 합니다. 이 값은 STATUS_INVALID_DISPOSITION으로 정의됩니다. |
|
스레드가 유효하지 않은 커널 개체에 대한 핸들을 사용했습니다(아마도 닫혔기 때문일 수 있음). 이 값은 STATUS_INVALID_HANDLE로 정의됩니다. |
|
스레드는 계속할 수 없는 예외가 발생한 후 실행을 계속하려고 시도합니다. 이 값은 STATUS_NONCONTINUABLE_EXCEPTION으로 정의됩니다. |
|
스레드가 현재 컴퓨터 모드에서 허용되지 않는 작업으로 명령 실행을 시도합니다. 이 값은 STATUS_PRIVILEGED_INSTRUCTION으로 정의됩니다. |
|
추적 트랩 또는 기타 단일 명령 메커니즘은 하나의 명령이 실행되었음을 알립니다. 이 값은 STATUS_SINGLE_STEP으로 정의됩니다. |
|
스레드는 스택을 사용합니다. 이 값은 STATUS_STACK_OVERFLOW로 정의됩니다. |
|
프레임 통합이 실행되었습니다. |
설명
GetExceptionCode 함수는 예외 처리기의 필터 식 또는 예외 처리기 블록 내에서만 호출할 수 있습니다. __try 블록 실행 중에 예외가 발생하면 필터 식을 평가하여 __except 블록의 실행 여부를 결정합니다.
필터 식은 필터 함수를 호출할 수 있습니다. 필터 함수는 GetExceptionCode를 호출할 수 없습니다. 그러나 GetExceptionCode의 반환 값은 필터 함수에 매개 변수로 전달될 수 있습니다. GetExceptionInformation 함수의 반환 값을 필터 함수에 매개 변수로 전달할 수도 있습니다. GetExceptionInformation은 예외 코드 정보를 포함하는 구조체에 대한 포인터를 반환합니다.
중첩된 처리기가 있는 경우 EXCEPTION_EXECUTE_HANDLER 또는 EXCEPTION_CONTINUE_EXECUTION으로 평가될 때까지 각 필터 식이 평가됩니다. 각 필터 식은 GetExceptionCode를 호출하여 예외 코드를 가져올 수 있습니다.
반환된 예외 코드는 하드웨어 예외에 의해 생성된 코드이거나 소프트웨어 생성 예외에 대해 RaiseException 함수에 지정된 코드입니다.
중단점 예외를 처리할 때 이 예외에서 계속하려면 컨텍스트 레코드의 명령 포인터를 증가시키는 것이 중요합니다.
예제
예를 보려면 예외 처리기 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 |
Windows Server 2003 [데스크톱 앱만 해당] |
추가 정보