Основные сведения о средствах отладки и обработки ошибок
Отладка программ - это проверка и внесение исправлений в программу при ее разработке.
В процессе отладки программы возможны три вида ошибок:
- ошибки компиляции, возникающие при неправильном использовании синтаксиса инструкций, свойств и методов объектов. Эти ошибки выявляются на уровне компиляции и легко исправляются;
- ошибки выполнения, возникающие при выполнении программы. Причиной таких ошибок может быть отсутствие данных, неправильные данные, неготовность устройства и так далее. Для устранения возникновения этих ошибок целесообразно использовать имеющиеся в VBA средства обработки ошибок.
Обработка ошибок - это задание реакции на ошибки, которые возникают во время выполнения программы. Целесообразно в программе создать подпрограмму - обработчик ошибок, тех которые могут возникнуть в данной программе на этапе выполнения;
- логические ошибки, являющиеся причиной неправильной работы программы. Для нахождения таких ошибок предназначены средства отладки. Средства отладки позволяют обнаружить логические ошибки и ошибки периода выполнения, а также наблюдать за выполнением программы.
К средствам обработки ошибок относятся операторы On Error, Resume.
Оператор On Errorосуществляет передачу управления на подпрограмму обработки ошибок. Возможны три варианта синтаксиса оператора:
On Error GoTo метка - | передача управления на подпрограмму, идентифицирующуюся меткой; |
On Error Resume Next - | ошибка игнорируется, и управление передается следующему оператору за тем, при выполнении которого возникла ошибка; |
On Error GoTo 0 - | отключает обработку ошибок для данной процедуры. |
Оператор Resume передает управление из обработчика ошибок в программу, возможны следующие варианты синтаксиса оператора:
Resume [0] - | повторное выполнение оператора, вызвавшего ошибку; |
Resume Next - | выполнение следующего оператора за тем, при выполнении которого возникла ошибка; |
Resume метка - | выполнение оператора, помеченного меткой. |
Объект Err,через свойства и методы которого можно получить о последней ошибке выполнения.
Свойства объекта Err:
Number - номер возникшей ошибки;
Source - имя проекта, в котором возникла ошибка;
Description - строка с описанием ошибки;
HelpFile - полное имя файла справки;
HelpContext - идентификационный номер ошибки в файле справке;
LastDLLError - содержит код системной ошибки для последнего вызова DLL.
Методы объекта Err:
Clear - очищает значения всех свойств объекта Err;
Raise - генерирует ошибку во время выполнения программы. Используется для проверки работы обработчика ошибок, или создания собственных ошибок при выполнении программы.
Средства отладки VBA дают возможность прервать выполнение программы в точке останова (точка останова - это специальная инструкция в процедуре VBA, на которой работа процедура приостанавливается), обеспечивают возможность пошагового выполнения процедуры, позволяют в процессе работы процедуры отслеживать значения ее переменных, выражений, свойств объектов, и если нужно изменять их.
В VBA имеется три режима работы с программой:
- режим конструктора (режим работы с текстом программы);
- режим выполнения (текст программы не доступен для изменения работы, его можно только просматривать);
- режим прерывания (приостановка работы программы, режим позволяет просматривать значения переменных, продолжать или прекращать работу программы, вносить изменения в текст программы).
Команды отладки доступны из меню Отладка или через панель Отладка. VBAимеет следующие средства отладки:
Запуск/ Продолжение | Переключение из режима конструктора в режим выполнение, или из режима прерывания в режим выполнения | |
Прервать | Переключение в режим прерывания | |
Сброс | Переключение из режима прерывания или выполнения в режим конструктора | |
Точка останова | Устанавливает / удаляет в текущей строке точку останова | |
Шаг с заходом | Выполняет следующую строку с заходом в процедуры | |
Шаг с обходом | Выполняет следующую строку без захода в процедуру, процедура выполняется полностью | |
Шаг с выходом | Выполняет оставшуюся часть процедуры и останавливается на следующем после вызова процедуры операторе | |
Окно локальных переменных | Открывает окно с текущими значениями всех локальных переменных процедуры | |
Окно отладки | Открывает окно, в котором можно выполнить нужные операторы | |
Окно контрольного значения | Открывает окно, в котором можно просматривать текущие значения переменных, выражений | |
Стек вызова | В режиме прерывания открывает диалоговое окно со списком всех работающих процедур |
Выполнение лабораторной работы
1. Открыть новый документ EXCEL или WORD.
2. Добавить в проект модуль с именем Отладка.
3. Добавить в модуль процедуру, подсчитывающую отношение суммы элементов массива и их произведения, а также нахождение среднего арифметического элементов массива, значение которых являются четными числами:
Public Sub pr_Otl1()
Dim b(10) As Integer
Dim s As Single
Dim p As Integer
Dim s1 As Single
Dim k As Integer
p = 1
For i = 1 To 10
b(i) = InputBox("Введите число")
If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1
s = s + b(i): p = p* b(i)
Next
s = s / p : MsgBox s
s1 = s1 / k : MsgBox s1
End Sub
4. Выполнить отладку процедуры. Запустить процедуру на выполнение и ввести значения элементов массива 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 .
VBA выдает ошибку выполнения № 6 - "переполнение" (Overflow).
В окне с сообщением об ошибке нажать кнопку Debug (Отладка). Цветом выделяется оператор, выполнение которого привело к возникновению ошибки.
5. Просмотреть значения переменных, влияющих на результат в режиме прерывания. Для этого в VBA имеется несколько средств:
- для просмотра значения конкретной переменной, установить на ее имя указатель мыши и значение переменной отобразится во всплывающей подсказке. Если этого не произошло, следует установить флажок Auto Data Tipsна вкладке Editopв окне команды Tools/Options.Просмотреть значение переменных p и b(i);
- для просмотра значений всех локальных переменных выполнить команду View\Locals Window (Вид\Окно локальных переменных);
- для просмотра значений нужных переменных и выражений использовать окноWatches (Контрольные значения).
Просмотреть в контрольном окне значение переменных p и b(i), а также выражения p*b(i). Для добавления переменной (выражения) в контрольное окно, следует выделить ее имя (выражение) в операторе и выполнить команду Add Watch (Отладка\Добавить контрольное значение).
Просмотр окна Watchesпозволяет сделать вывод, что тип переменной p не соответствует помещаемому значению. Тип переменной р необходимо изменить на Long (Длинное целое). Внести изменение в текст процедуры. Закрыть окно Watches.
Повторно выполнить программу.
6. Продолжить отладку программы. Запустить программу на выполнение и ввести значения 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. VBA выдает ошибку выполнения №11 - "деление на 0" (Division by zero). Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.
7. Перейти из режима прерывания программы в режим конструктора. Для этого выполнить команду Run\Reset (Запуск\Сброс)или нажать кнопку Сбросна панелиСтандарт.
8. Продолжить отладку программы. Запустить ее на выполнение и ввести значения 1,3,5,7,9,11,13,15,17, 19. VBA выдает ошибку выполнения № 6 - "переполнение". Просмотреть значение переменных, участвующих в вычислениях в операторе, выполнение которого привело к возникновению ошибки.
9. Добавить в процедуру обработчик ошибок. Для этого отредактировать процедуру в соответствии с приведенным ниже текстом:
Public Sub pr_Otl1()
Dim b(10) As Integer
Dim s As Single
Dim p As Long
Dim s1 As Single
Dim k As Integer
On Error GoTo MyErrHandler
p = 1
Vvod: For i = 1 To 10
b(i) = InputBox("Введите число")
If b(i) Mod 2 = 0 Then s1 = s1 + b(i): k = k + 1
s = s + b(i): p = p * b(i)
Next
s = s / p
MsgBox s
s1 = s1 / k
MsgBox s1
Exit Sub
MyErrHandler:
Select Case Err.Number
Case 6
MsgBox "среди элементов массива нет четных чисел, повторите ввод"
Err.Clear: s1 = 0: p = 1
Resume Vvod
Case 11
MsgBox "Один из элементов массива равен нулю," & _
" отношение суммы к произведению элементов найти нельзя"
Resume Next
Case Else
Dim err_num As Integer
err_num = Err.Number
MsgBox "Ошибка выполнения" & err_num
Err.Clear
Resume Next
End Select
End Sub
10. Выполнить отладку обработчика ошибок. Для этого выполнить программу несколько раз, вводя по очереди такие исходные данные, которые привели бы к возникновению всех обрабатываемых ошибок.
11. Осуществить пошаговое выполнение программы (трассировку) с помощью команды Debug\Step Into (Отладка \ Шаг с заходом),анализируя изменение значений переменных процедуры на каждом шаге выполнения.
12. Осуществить пошаговое выполнение части программы. Для этого необходимо:
- установить точку останова, щелкнув указателем мыши по левому полю рядом с нужной строкой программы, или выполнив команду Debug\Toggle Breakpoint (Отладка\Точка останова),или нажав клавишу F9 (например: установить точку останова на строке s = s / p);
- запустить процедуру на выполнение;
- после прерывания работы процедуры просмотреть значение переменных s,s1,p,k;
- продолжить выполнение процедуры в режиме трассировки;
- удалить точку останова.
ЛАБОРАТОРНАЯ РАБОТА №3.