Операционные системы. Учебное пособие. Марапулец Ю.В. - 85 стр.

UptoLike

Составители: 

переполнение и потеря разрядов в операции с плавающей запятой (floating-point
overflow and underflow);
зарезервированный операнд в операции с плавающей запятой (floating-point reserved
operand);
нарушение защиты страницы (guard-page violation);
недопустимый оператор (illegal instruction);
деление на ноль в операции с целыми числами (integer divide by zero);
переполнение в операции с целыми числами (integer overflow);
нарушение прав доступа к памяти (memory-access violation);
ошибка чтения страницы (page-read error);
превышение квоты страничного файла (paging file quota exceeded);
привилегированный оператор (privileged instruction).
Тип возникшего исключения можно определить, используя функцию DWORD Ge-
tExceptionCode(void). Функция возвращает код исключения. В таблице 3.1 приведены
наименования основных кодов.
Таблица 3.1
EXCEPTION_ACCESS_VIOLATION Попытка обращения к ячейке памяти,
доступ к которой запрещен (например,
память не выделена)
EXCEPTION_FLT_DIVIDE_BY_ZERO Деление на ноль с плавающей точкой
EXCEPTION_INT_DIVIDE_BY_ZERO Деление на ноль с фиксированной точкой
EXCEPTION_INT_OVERFLOW Целочисленное переполнение
EXCEPTION_PRIV_INSTRUCTION Попытка исполнения привилегированной
команды
§ 3.3. Средства обработки исключений в Visual C++
Блок программного кода на языке С++ всегда должен начинаться ключевыми сло-
вами try и catch. Блок try помечает фрагмент программы, который может породить ис-
ключение, а блок catch содержит программу, запускающуюся при наличии исключения.
С точки зрения программиста, подобные синтаксические структуры удобны для отделе-
ния программного кода, предназначенного для обработки исключительных ситуаций, от
кода, выполняющего обычные задачи. В Visual C++ реализован механизм обработки
исключений, который основан на схеме, предложенной ANSI-комитетом по стандарти-
зации языка C++. В соответствии с этой схемой, перед вызовом функции, которая может
стать причиной возникновения исключительной ситуации, должен быть инициирован
обработчик исключений. Если функция приводит к возникновению ненормальной си-
туации, генерируется исключение и управление передается обработчику.
В среде Visual C++ обработка исключений поддерживается с помощью нескольких
механизмов:
функций, обеспечивающих структурированную обработку исключений;
классов, отвечающих за обработку определенных типов исключений;
макрокоманд, позволяющих осуществить структуризацию обработчиков исключений
приложения;
функций, предназначенных для генерации исключений различных типов.
Все эти механизмы позволяют генерировать исключения нужных типов и при не-
обходимости прекращать выполнение программы.
Как уже было сказано выше, основу любого механизма обработки исключений в
среде Visual C++ составляют операторы try и catch. Структура try/catch отделяет подпро-
87
•  переполнение и потеря разрядов в операции с плавающей запятой (floating-point
   overflow and underflow);
• зарезервированный операнд в операции с плавающей запятой (floating-point reserved
   operand);
• нарушение защиты страницы (guard-page violation);
• недопустимый оператор (illegal instruction);
• деление на ноль в операции с целыми числами (integer divide by zero);
• переполнение в операции с целыми числами (integer overflow);
• нарушение прав доступа к памяти (memory-access violation);
• ошибка чтения страницы (page-read error);
• превышение квоты страничного файла (paging file quota exceeded);
• привилегированный оператор (privileged instruction).
     Тип возникшего исключения можно определить, используя функцию DWORD Ge-
tExceptionCode(void). Функция возвращает код исключения. В таблице 3.1 приведены
наименования основных кодов.
                                                                           Таблица 3.1
EXCEPTION_ACCESS_VIOLATION                    Попытка обращения к ячейке памяти,
                                              доступ к которой запрещен (например,
                                              память не выделена)
EXCEPTION_FLT_DIVIDE_BY_ZERO                  Деление на ноль с плавающей точкой
EXCEPTION_INT_DIVIDE_BY_ZERO                  Деление на ноль с фиксированной точкой
EXCEPTION_INT_OVERFLOW                        Целочисленное переполнение
EXCEPTION_PRIV_INSTRUCTION                    Попытка исполнения привилегированной
                                              команды

     § 3.3. Средства обработки исключений в Visual C++

     Блок программного кода на языке С++ всегда должен начинаться ключевыми сло-
вами try и catch. Блок try помечает фрагмент программы, который может породить ис-
ключение, а блок catch содержит программу, запускающуюся при наличии исключения.
С точки зрения программиста, подобные синтаксические структуры удобны для отделе-
ния программного кода, предназначенного для обработки исключительных ситуаций, от
кода, выполняющего обычные задачи. В Visual C++ реализован механизм обработки
исключений, который основан на схеме, предложенной ANSI-комитетом по стандарти-
зации языка C++. В соответствии с этой схемой, перед вызовом функции, которая может
стать причиной возникновения исключительной ситуации, должен быть инициирован
обработчик исключений. Если функция приводит к возникновению ненормальной си-
туации, генерируется исключение и управление передается обработчику.
     В среде Visual C++ обработка исключений поддерживается с помощью нескольких
механизмов:
• функций, обеспечивающих структурированную обработку исключений;
• классов, отвечающих за обработку определенных типов исключений;
• макрокоманд, позволяющих осуществить структуризацию обработчиков исключений
    приложения;
• функций, предназначенных для генерации исключений различных типов.
     Все эти механизмы позволяют генерировать исключения нужных типов и при не-
обходимости прекращать выполнение программы.
     Как уже было сказано выше, основу любого механизма обработки исключений в
среде Visual C++ составляют операторы try и catch. Структура try/catch отделяет подпро-



                                          87