EXCEPTION_RECORD 구조체(winnt.h)

예외를 설명합니다.

구문

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode;
  DWORD                    ExceptionFlags;
  struct _EXCEPTION_RECORD *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters;
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;

멤버

ExceptionCode

예외가 발생한 이유입니다. 하드웨어 예외에 의해 생성된 코드이거나 소프트웨어 생성 예외에 대해 RaiseException 함수에 지정된 코드입니다. 다음 표에서는 일반적인 프로그래밍 오류로 인해 발생할 수 있는 예외 코드를 설명합니다.

의미
EXCEPTION_ACCESS_VIOLATION
스레드가 적절한 액세스 권한이 없는 가상 주소에서 읽거나 쓰려고 했습니다.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
스레드는 범위를 벗어난 배열 요소에 액세스하려고 시도했으며 기본 하드웨어는 경계 검사를 지원합니다.
EXCEPTION_BREAKPOINT
중단점이 발견되었습니다.
EXCEPTION_DATATYPE_MISALIGNMENT
스레드는 정렬을 제공하지 않는 하드웨어에서 잘못 정렬된 데이터를 읽거나 쓰려고 했습니다. 예를 들어 16비트 값은 2 바이트 경계에 맞춰야 합니다. 4 바이트 경계의 32비트 값 등
EXCEPTION_FLT_DENORMAL_OPERAND
부동 소수점 연산의 피연산자 중 하나는 비정규입니다. 비정규 값은 표준 부동 소수점 값으로 표현하기에는 너무 작은 값입니다.
EXCEPTION_FLT_DIVIDE_BY_ZERO
스레드는 부동 소수점 값을 0의 부동 소수점 수로 나누려고 했습니다.
EXCEPTION_FLT_INEXACT_RESULT
부동 소수점 연산의 결과는 10진수 분수로 정확하게 나타낼 수 없습니다.
EXCEPTION_FLT_INVALID_OPERATION
이 예외는 이 목록에 포함되지 않은 부동 소수점 예외를 나타냅니다.
EXCEPTION_FLT_OVERFLOW
부동 소수점 연산의 지수는 해당 형식에서 허용하는 크기보다 큽습니다.
EXCEPTION_FLT_STACK_CHECK
부동 소수점 작업의 결과로 스택이 오버플로되거나 언더플로됩니다.
EXCEPTION_FLT_UNDERFLOW
부동 소수점 연산의 지수가 해당 형식에서 허용하는 크기보다 작습니다.
EXCEPTION_ILLEGAL_INSTRUCTION
스레드가 잘못된 명령을 실행하려고 했습니다.
EXCEPTION_IN_PAGE_ERROR
스레드가 존재하지 않는 페이지에 액세스하려고 했지만 시스템에서 페이지를 로드할 수 없습니다. 예를 들어 네트워크를 통해 프로그램을 실행하는 동안 네트워크 연결이 끊어지면 이 예외가 발생할 수 있습니다.
EXCEPTION_INT_DIVIDE_BY_ZERO
스레드는 정수 값을 0의 정수 수로 나누려고 했습니다.
EXCEPTION_INT_OVERFLOW
정수 연산의 결과로 결과의 가장 중요한 비트가 수행되었습니다.
EXCEPTION_INVALID_DISPOSITION
예외 처리기가 예외 디스패처에 잘못된 처리를 반환했습니다. C와 같은 고급 언어를 사용하는 프로그래머는 이 예외가 발생하지 않아야 합니다.
EXCEPTION_NONCONTINUABLE_EXCEPTION
스레드는 연결할 수 없는 예외가 발생한 후 실행을 계속하려고 했습니다.
EXCEPTION_PRIV_INSTRUCTION
스레드는 현재 컴퓨터 모드에서 작업이 허용되지 않는 명령을 실행하려고 했습니다.
EXCEPTION_SINGLE_STEP
추적 트랩 또는 다른 단일 명령 메커니즘은 하나의 명령이 실행되었음을 알 수 있습니다.
EXCEPTION_STACK_OVERFLOW
스레드는 스택을 사용했습니다.
 

콘솔 프로세스 디버깅 시 또 다른 예외 코드가 발생할 수 있습니다. 프로그래밍 오류로 인해 발생하지 않습니다. DBG_CONTROL_C 예외 코드는 Ctrl+C 신호를 처리하고 디버그하는 콘솔 프로세스에 Ctrl+C가 입력될 때 발생합니다. 이 예외 코드는 애플리케이션에서 처리할 수 없습니다. 디버거의 이점을 위해서만 발생하며 디버거가 콘솔 프로세스에 연결된 경우에만 발생합니다.

ExceptionFlags

이 멤버에는 0개 이상의 예외 플래그가 포함되어 있습니다. 다음 표에서는 일반적으로 표시되는 일부 예외 플래그에 대해 설명합니다. 다음 표에 없는 예외 플래그는 시스템 사용을 위해 예약된 것으로 처리해야 합니다.

예외 플래그 의미
EXCEPTION_NONCONTINUABLE
이 플래그의 존재는 예외가 지속 불가능한 예외임을 나타내는 반면, 이 플래그가 없으므로 예외가 연속 가능한 예외임을 나타냅니다. 연결할 수 없는 예외 후 실행을 계속하려고 하면 EXCEPTION_NONCONTINUABLE_EXCEPTION 예외가 발생합니다.
EXCEPTION_SOFTWARE_ORIGINATE
이 플래그는 시스템 사용을 위해 예약되어 있습니다.

ExceptionRecord

연결된 EXCEPTION_RECORD 구조체에 대한 포인터입니다. 중첩된 예외가 발생할 때 추가 정보를 제공하기 위해 예외 레코드를 함께 연결할 수 있습니다.

ExceptionAddress

예외가 발생한 주소입니다.

NumberParameters

예외와 연결된 매개 변수 수입니다. ExceptionInformation 배열에 정의된 요소의 수입니다.

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

예외를 설명하는 추가 인수의 배열입니다. RaiseException 함수는 이 인수 배열을 지정할 수 있습니다. 대부분의 예외 코드에서 배열 요소는 정의되지 않습니다. 다음 표에서는 배열 요소가 정의된 예외 코드에 대해 설명합니다.

예외 코드 의미
EXCEPTION_ACCESS_VIOLATION
배열의 첫 번째 요소에는 액세스 위반을 일으킨 작업 유형을 나타내는 읽기-쓰기 플래그가 포함되어 있습니다. 이 값이 0이면 스레드가 액세스할 수 없는 데이터를 읽으려고 했습니다. 이 값이 1이면 스레드가 액세스할 수 없는 주소에 쓰려고 했습니다.

이 값이 8이면 스레드에서 DEP(사용자 모드 데이터 실행 방지) 위반이 발생했습니다.

두 번째 배열 요소는 액세스할 수 없는 데이터의 가상 주소를 지정합니다.

EXCEPTION_IN_PAGE_ERROR
배열의 첫 번째 요소에는 액세스 위반을 일으킨 작업 유형을 나타내는 읽기-쓰기 플래그가 포함되어 있습니다. 이 값이 0이면 스레드가 액세스할 수 없는 데이터를 읽으려고 했습니다. 이 값이 1이면 스레드가 액세스할 수 없는 주소에 쓰려고 했습니다.

이 값이 8이면 스레드에서 DEP(사용자 모드 데이터 실행 방지) 위반이 발생했습니다.

두 번째 배열 요소는 액세스할 수 없는 데이터의 가상 주소를 지정합니다.

세 번째 배열 요소는 예외를 초래한 기본 NTSTATUS 코드를 지정합니다.

설명

디버거가 다른 아키텍처(32비트 및 64비트)에서 실행되는 대상을 디버그할 수 있도록 하려면 이 구조체의 명시적 형식 중 하나를 사용합니다.

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
머리글 winnt.h(Windows.h 포함)

추가 정보

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter