Описывает исключение.
Синтаксис
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