Поделиться через


структура 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-байтовой границе; 32-разрядные значения на 4-байтовых границах и т. д.
EXCEPTION_FLT_DENORMAL_OPERAND
Один из операндов в операции с плавающей запятой является денормальным. Денормальное значение — это значение, которое слишком мало для представления в качестве стандартного значения с плавающей запятой.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Поток попытался разделить значение с плавающей запятой на делитель с плавающей запятой, равный нулю.
EXCEPTION_FLT_INEXACT_RESULT
Результат операции с плавающей запятой не может быть представлен точно как десятичная дробь.
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
Поток попытался разделить целочисленное значение на целочисленный делитель, равный нулю.
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

Этот элемент содержит ноль или более флагов исключений. В следующей таблице описаны некоторые часто встречающиеся флаги исключений. Флаги исключений, отсутствуют в следующей таблице, следует рассматривать как зарезервированные для использования системой.

Флаг исключения Значение
EXCEPTION_NONCONTINUABLE
Наличие этого флага указывает на то, что исключение является неразрывным исключением, а отсутствие этого флага указывает на то, что исключение является непрерывным исключением. Любая попытка продолжить выполнение после неиссякаемого исключения вызывает исключение EXCEPTION_NONCONTINUABLE_EXCEPTION .
EXCEPTION_SOFTWARE_ORIGINATE
Этот флаг зарезервирован для использования системой.

ExceptionRecord

Указатель на связанную EXCEPTION_RECORD структуру. Записи исключений можно объединять в цепочку для предоставления дополнительных сведений при возникновении вложенных исключений.

ExceptionAddress

Адрес, по которому возникло исключение.

NumberParameters

Количество параметров, связанных с исключением. Это количество определенных элементов в массиве ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Массив дополнительных аргументов, описывающих исключение. Функция RaiseException может указать этот массив аргументов. Для большинства кодов исключений элементы массива не определены. В следующей таблице описаны коды исключений, элементы массива которых определены.

Код исключения Значение
EXCEPTION_ACCESS_VIOLATION
Первый элемент массива содержит флаг чтения и записи, указывающий тип операции, вызвавшей нарушение доступа. Если это значение равно нулю, поток попытался прочитать недоступные данные. Если это значение равно 1, поток попытался выполнить запись на недоступный адрес.

Если это значение равно 8, поток вызвал нарушение защиты от выполнения данных в пользовательском режиме (DEP).

Второй элемент массива указывает виртуальный адрес недоступных данных.

EXCEPTION_IN_PAGE_ERROR
Первый элемент массива содержит флаг чтения и записи, указывающий тип операции, вызвавшей нарушение доступа. Если это значение равно нулю, поток попытался прочитать недоступные данные. Если это значение равно 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