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


Исключения оборудования

Большинство стандартных исключений, распознаваемых операционной системой, являются аппаратными исключениями. Windows распознает несколько низкоуровневых программных исключений, однако обычно операционная система обрабатывает их лучше всего.

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

В следующей таблице приводятся сведения об аппаратных исключениях, распознаваемых Windows.

Код исключения

Причина исключения

STATUS_ACCESS_VIOLATION

Чтение или запись в недоступный адрес в памяти.

STATUS_BREAKPOINT

Обнаружение аппаратной точки останова; используется только в отладчиках.

STATUS_DATATYPE_MISALIGNMENT

Чтение и запись в данные по адресу с неверным выравниванием. Например, 16-разрядные записи должны выравниваться относительно машинных слов с границей 2 байта. (Не применяется к процессорам Intel 80x86.)

STATUS_FLOAT_DIVIDE_BY_ZERO

Деление значения с плавающей запятой на 0,0.

STATUS_FLOAT_OVERFLOW

Превышение максимальной положительной экспоненты с плавающей запятой.

STATUS_FLOAT_UNDERFLOW

Превышение модуля наименьшей отрицательной экспоненты с плавающей запятой.

STATUS_FLOATING_RESEVERED_OPERAND

Использование зарезервированного формата с плавающей запятой (недопустимое использование формата).

STATUS_ILLEGAL_INSTRUCTION

Попытка выполнить код инструкции, не определенной процессором.

STATUS_PRIVILEGED_INSTRUCTION

Выполнение инструкции, которая не разрешена в текущем режиме машины.

STATUS_INTEGER_DIVIDE_BY_ZERO

Деление значения целочисленного типа на 0.

STATUS_INTEGER_OVERFLOW

Попытка выполнения операции, которая превышает диапазон целочисленного типа.

STATUS_SINGLE_STEP

Выполнение одной инструкции в пошаговом режиме; используется только в отладчиках.

Большинство исключений, перечисленных в приведенной выше таблице, должны обрабатываться отладчиками, операционной системой или другим низкоуровневым кодом. Ваш код не должен обрабатывать эти ошибки, за исключением ошибок целочисленных значений и значений с плавающей запятой. Поэтому в большинстве случаев вам потребуется использовать фильтр обработки исключений, чтобы игнорировать исключения (значение 0). В противном случае низкоуровневые механизмы не смогут правильно реагировать на них. Однако вы можете написать обработчики завершения, чтобы предотвратить возможные последствия таких низкоуровневых ошибок.

См. также

Ссылки

Написание обработчика исключений

Структурированная обработка исключений (C/C++)