Макрос 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 [только классические приложения] |
См. также раздел