Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 07 VB Обработка ошибок.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
91.65 Кб
Скачать

Обработка ошибок при вложенных вызовах процедур

В ложенный вызов процедур влияет на обработку ошибок. Если вызываемая процедура или функция не имеет собственного обработчика ошибок, то Visual Basic ищет его в вызывающей процедуре. Если данная процедура содержит обработчик ошибок, то возникшая ошибка будет обработана. В зависимости от результатов обработки выполнение программы можно продолжить либо с помощью оператора Resume (для повторного вызова процедуры или функции), либо с помощью оператора Resume Next (для продолжения выполнения программы со следующей за вызовом процедуры строки).

На рисунке видно, что обработка ошибки, возникшей в Proc, выполняется оператором On Error вызвавшей ее процедуры cmdCalc_Click. В общем случае поиск обработчика ошибок осуществляется сначала в текущей процедуре, а затем – в вызывающей.

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

Е сли в обработчике ошибок используется оператор Resume Next, то выполнение приложения продолжается в строке, следующей за строкой вызова процедуры; если ж используется оператор Resume, то происходит возврат в строку вызова процедуры.

Глобальная обработка ошибок

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

Неожиданные ошибки выполнения

Профессионально разработанные приложения должны перехватывать и обрабатывать все возможные ошибки. Поэтому появление ошибок в окончательной версии программы свидетельствует о недостаточно основательном тестировании программы.

Для всех ожидаемых ошибок должны быть предусмотрены соответствующие обработчики. При появлении неожиданных ошибок разработчик, как минимум, должен вывести сообщение об ошибке, чтобы в дальнейшем эту ошибку можно было проанализировать и подготовить для неё свой обработчик (сделать ошибку ожидаемой). Для выявления неожиданных ошибок при тестировании приложения моделируются различные экстремальные ситуации, и проверяется работоспособность программы. При выводе сообщения о неожиданной ошибке можно воспользоваться свойством Description объекта Err, которое содержит системное описание ошибки:

MsgBox Err.Description

Свойство Description можно использовать и для задания собственных сообщений об ошибке:

Select Case Err.Number

Case 5: Err.Description = " Корень из отрицательного числа "

Case 6: Err.Description = " Введено слишком большое число "

Case 11: Err.Description = " Деление на ноль "

Case 13: Err.Description = " Введено не число "

End Select

MsgBox "ОшибкаU№U"U&UErr.NumberU&UvbCrLfU&UErr.Description , vbCritical , "Ошибка"

Возникновение ошибок выполнения можно и сымитировать. Для этого предназначен метод Raise объекта Err:

Err.Raise 11

Такое использование метода Raise вызывает ошибку выполнения "деление на ноль" (код 11). После вызова метода Raise можно проверить корректность обработки ошибки данного типа обработчиком.

Во время работы с OLE объектами или другими программами иногда нужно знать имя приложения, в котором произошла ошибка:

Err.Source ="Раздел А"

Для каждого модуля или компонента приложения можно предусмотреть задание собственного значения свойства Source. Благодаря этому при обработке ошибок можно точно локализовать источник ошибки.

Метод Clear позволяет очистить значения всех свойств объекта Err:

Err.Clear