Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Летняя практика КОНСПЕКТ ПО ТМиЯП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.35 Mб
Скачать

Лекция №13 «Обработка ошибок в работе программ»

Исполнение любой программы может сопровождаться появлением сочетаний данных, которые считаются ошибочными. Не учитывать подобные ситуации – значит строить ненадежную программу. Обработка ошибок в программах на многих языках может строиться по двум основным направлениям:

- пассивное реагирование на ошибочную ситуацию

- активное реагирование на ошибочную ситуацию

Оба пути не исключают друг друга, а могут комбинироваться.

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

В основе активного режима обработки ошибок лежит использование исключений. Исключение в программе это специфическая ситуация, которая возникает после использования ключевого слова “throw”. Оператора “throw” выбрасывает исключения. Смысл этого действия в том, что дальнейшее исполнение программного кода функции прекращается, управление передается в вызвавшую функцию и далее возможно две ситуации:

- вызвавшая функция обрабатывает исключения.

- вызвавшая функция не обрабатывает исключения. Здесь объект исключения “пробрасывается” в вызвавшую функцию верхнего уровня и так далее до тех пор, пока

исключение либо не будет обработано, либо будет выброшено ОС, в этом случае программа аварийно завершается.

Обработка исключений строится на использовании операторов try и catch.

Обработка исключений при использовании try и catch осуществляется по следующему сценарию:

- Последовательно выполняются строки кода в блоке try. Если исключений не возникло, после блока try исполняется код, размещенный после ловушек.

- Если возникло исключение в блоке try дальнейшее исполнение кода прерывается и система исполнения программ стремится найти ловушку, соответствующую типу исключения. Если не одна ловушка не сработала, исключение “пробрасывается” в вызвавшую функцию.

- Выполняется программный код первой подходящей ловушки. Все ловушки просматриваются сверху вниз. После выполнения кода ловушки, делается переход на программный код за пределами ловушки. Исключение считается обработанным, программа продолжается в обычном режиме.

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

Catch(…) это вариант ловушки, которая ловит любые типы исключений.

Стандартная библиотека С++ выбрасывает ряд исключений, определенных классов, описанных в самой библиотеке.