Основные сведения о средствах отладки и обработки ошибок

Отладка программ - это проверка и внесение исправлений в программу при ее разработке.

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

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

- ошибки выполнения, возникающие при выполнении программы. Причиной таких ошибок может быть отсутствие данных, неправильные данные, неготовность устройства и так далее. Для устранения возникновения этих ошибок целесообразно использовать имеющиеся в 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имеет следующие средства отладки:

Основные сведения о средствах отладки и обработки ошибок - student2.ru Запуск/ Продолжение Переключение из режима конструктора в режим выполнение, или из режима прерывания в режим выполнения
Основные сведения о средствах отладки и обработки ошибок - student2.ru Прервать Переключение в режим прерывания
Основные сведения о средствах отладки и обработки ошибок - student2.ru Сброс Переключение из режима прерывания или выполнения в режим конструктора
Основные сведения о средствах отладки и обработки ошибок - student2.ru Точка останова Устанавливает / удаляет в текущей строке точку останова
Основные сведения о средствах отладки и обработки ошибок - student2.ru Шаг с заходом Выполняет следующую строку с заходом в процедуры
Основные сведения о средствах отладки и обработки ошибок - student2.ru Шаг с обходом Выполняет следующую строку без захода в процедуру, процедура выполняется полностью
Основные сведения о средствах отладки и обработки ошибок - student2.ru Шаг с выходом Выполняет оставшуюся часть процедуры и останавливается на следующем после вызова процедуры операторе
Основные сведения о средствах отладки и обработки ошибок - student2.ru Окно локальных переменных Открывает окно с текущими значениями всех локальных переменных процедуры
Основные сведения о средствах отладки и обработки ошибок - student2.ru Окно отладки Открывает окно, в котором можно выполнить нужные операторы
Основные сведения о средствах отладки и обработки ошибок - student2.ru Окно контрольного значения Открывает окно, в котором можно просматривать текущие значения переменных, выражений
Основные сведения о средствах отладки и обработки ошибок - student2.ru Стек вызова В режиме прерывания открывает диалоговое окно со списком всех работающих процедур

Выполнение лабораторной работы

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.

Наши рекомендации