Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
425 Кб
Скачать
☆
    1. Ошибки в структуре программы.

Ошибки в структуре программы – это синтаксические ошибки в многострочных операторах циклов и ветвления. Такие ошибки образуют отдельную группу ошибок, которые не распознаются при вводе кода. Однако при компиляции программы такие ошибки распознаются при компиляции. Начиная с версии VB.4.0 набранная программа не компилируется полностью, если ее запускают из среды разработки нажатием клавиши F5 или щелчком мыши на кнопке Run панели инструментов. В этом случае ошибки в структуре программы на этапе выполнения выявляются только при обращении к процедуре, содержащей ошибочную структуру. Если же запуск программы осуществляется с помощью команды Start With Full Compile меню Run или нажатием клавиш [Ctrl + F5], то все ошибки в структуре программы обнаруживаются сразу при компиляции проекта. При компиляции VB также определяет имена объектов, не связанных с элементами управления, и выявляет переменные, которые не были явно объявлены. Проверка на отсутствие синтаксических ошибок и ошибок в структуре программы осуществляется так же и при создании выполняемого файла (команда Make *EXE меню File.

Ошибки, возникающие при выполнении программы.

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

Если же такая ошибка возникает после запуска выполняемого EXE – файла, то приложение немедленно закрывается. Хотя сообщение об ошибке и появляется, перейти в режим отладки невозможно.

Перехват ошибки периода выполнения следует предусмотреть на этапе разработки приложения. Для этого необходимо создавать специальные процедуры – обработчики ошибок (error hendlers ).

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

ожидаемые – обработка которых предусмотрена разработчиком;

неожиданные – появление которых не всегда могут предусмотреть даже опытные программисты.

Ожидаемые ошибки времени выполнения.

Обработка ожидаемых ошибок производится в три этапа:

подготовка перехвата;

проверка и устранение ошибок;

продолжение выполнения программы.

Схема обработки ошибок периода выполнения представлена на рис. 1.

Активизация механизма обработки ошибок

ошибка

Возврат

Обработка ошибки

    1. Перехват и устранение ошибок

Подготовка перехвата

Первым шагом является расстановка «ловушек». В VB для этого предназначен оператор On Erro.

On Error (GoTo Label | Resume Next | GoTo ( ) ]

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

Метка (Label ), указанная в операторе, должна находиться в той же процедуре, что и оператор On Error. Если в качестве метки указан ноль, то предусмотренная разработчиком процедура обработки ошибок отключается и включается стандартный механизм обработки ошибок.

Проверка и устранение ошибки

Оператор On Error непосредственно не выполняет никакой обработки ошибок. а лишь передает управление ответственному за обработку ошибок фрагменту программы. Для обеспечения перехвата всех ошибок в прцедуре оператор On Error. по возможности, должен находиться в самом начале.

Обработка ошибки должна выполняться сразу после ее обнаружения. Сначала следует установить тип ошибки , Для этого в VB существует объект Err. свойство которого Number содержит код последней возникшей ошибки.

Пример: ErrNum1 As Integer

ErrNum = Err

Переменной ErrNum присваивается код ошибки.

Список кодов ошибок, которые можно перехватывать и обрабатывать, можно найти в документации по языку.

После определения типа ошибки по ее коду (свойство Number объекта Err) следует попытаться устранить ошибку или обработать ее так, чтобы она не мешала выполнению программы.

Продолжение выполнения программы

Завершив обработку ошибки, следует продолжить нормальное выполнениепрограммы. Ключевое слово ReSume позволяет вернуться в строку , вызвавшую ошибку, для ее повторного выполнения, а оператор Resume Next возвращает в следующую за строкой с ошибкой строку.

Resume [( Next | Label)]

Оператор Resume Next можно использовать вместе с оператором On Error, и тогда каждая строка вызвавшая ошибку игнорируется.

Обработка ошибок выполнения.

Итак, вначале процедуры помещается оператор On Error для перехвата возникающих ошибок. В нем указывается метка. к которой происходит переход при возникновении ошибок. обычно эта метка находится в конце процедуры и перед ней помещаетсяч оператор Exit. Благодаря этому оператору , при безошибочном выполнении процедура завершает работу, и фрагмент прцедуры после метки выполняется только после возникновения ошибки.

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

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

Оператор On Error должен заканчиваться Resume либо другим оператором. завершения обработки ошибок. иначе при компиляции возникнет ошибка в структуре прграммы. для этого могут использоваться операторы:

Resume / Resnme Next / Resume Label;

Exit Sub / Exit Function / Exit Procedure;

End / Stop