Национальный исследовательский университет "Высшая Школа Экономики"
Опубликован: 19.11.2012 | Доступ: свободный | Студентов: 2301 / 561 | Длительность: 30:21:00
Специальности: Менеджер, Преподаватель
Лекция 17:

Отладка программ

< Лекция 16 || Лекция 17 || Лекция 18 >
Аннотация: Процесс проверки работоспособности программы носит название "отладка" или "тестирование".

Для отладки процедур используются различные приемы:

  • прерывание программы в контрольной точке (Breakpoint) или при выполнении некоторого условия;
  • выполнение программы по шагам (по операторам) – Step;
  • отслеживание значений переменных или свойств объектов в окне контрольных значений – Watch;
  • изменение значений переменных вручную;
  • редактирование текста программы в режиме прерывания;
  • продолжение выполнения программы, начиная с некоторого оператора, и т. п.

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

В режиме отладки программы можно продолжить или прервать выполнение программы, используя кнопки Продолжить и Прервать или соответствующие команды меню Run. Можно выполнять программу по шагам. При корректировке текста программы в режиме прерывания редактор VB иногда выдает сообщение о невозможности продолжения программы.

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

17.1. Ошибки и их обнаружение

Ошибки делятся на три категории: ошибки разработки (синтаксические ошибки), ошибки компиляции, ошибки выполнения.

Синтаксическая ошибка – нарушение правил языка VBA. Это может быть некорректный оператор, неверно введенное имя переменной, если объявление переменных обязательно, отсутствие разделителей между аргументами, несоответствие открывающих и закрывающих скобок, отсутствие закрывающих операторных скобок (End If, Next и др.), неуникальное название процедуры и т.п.

При разработке программ рекомендуется включать опцию автоматической проверки синтаксиса – Auto Syntax Check; пользоваться контекстно-зависимой подсказкой, которая возникает при наборе имен объектов, их свойств или методов и устанавливается опцией Auto Quick info (см. рис. 15.4).

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

При наборе текста процедур редактор VB немедленно реагирует на синтаксическую ошибку: некорректный оператор выделяется цветом (по умолчанию красным) и причина возникновения ошибки поясняется сообщением. Невозможно запустить процедуру, если в какой-нибудь процедуре любого открытого проекта обнаружена синтаксическая ошибка.

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

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

При выявлении ошибки происходит прерывание программы и возникает диалог (рис.17.1), если на вкладке General диалогового окна Options (рис. 15.4) установлена опция Break on All Errors (останов при любой ошибке). Нажатие кнопки Debug переводит программу в режим отладки. Оператор, на котором произошло прерывание, т. е. возникла ошибка, подсвечивается.

Прерывание программы  и сообщение об ошибке

Рис. 17.1. Прерывание программы и сообщение об ошибке
Окна отладчика

При отладке программ рекомендуется активно использовать окна Visual Basic.

Окно проверки Immediate Window (иначе "оперативная панель") выводится на экран одноименной командой из меню View или клавишами Ctrl+G и используется для целей:

  • отображения информации, получаемой в результате выполнения операторов (отладочная печать);
  • тестирования команд, вводимых непосредственно в этом окне;
  • получения или изменения значений переменных или свойств объектов, доступных в выполняемой процедуре.

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

Оператор Debug.Print используется для организации вывода в окно Immediate в режиме выполнения программы (отладочная печать). Синтаксис оператора:

Debug.Print [outputlist]

  • outputlist – список распечатываемых переменных или выражений (указывать необязательно). Если аргумент опущен, выводится пустая строка.

Ссылка на объект Debug является обязательной. В результате выполнения оператора данные отображаются в окне Immediate с учетом национальной настройки, т. е. используется соответствующее форматирование. Значения типа Date выводятся в стандартном кратком формате дат, установленном в системе. Логические значения распечатываются как True или False.

Например, оператор ? 355/113 рассчитает приблизительное значение числа pi, а оператор Debug.Print "value of a", a, расположенный в теле процедуры, распечатает текст "value of a" и значение переменной a на одной строке.

Если во время прерывания программы подвести курсор к идентификатору переменной внутри выполняемой процедуры, рядом с текстовым курсором появится текущее значение переменной в виде контекстной подсказки. Это окно значения переменной. На рис.17.2 показано значение переменной Var_A, равное 2.

 Окно значения переменной

Рис. 17.2. Окно значения переменной

На рис.17.3 показано окно локальных переменных (Locals Window), которое отображает все описанные в текущей процедуре Value_A переменные и их значения. Окно высвечивается командой Locals Window из меню View.

В окне локальных переменных можно:

  • просмотреть значения любой переменной выполняемых процедур, локальных или определенных на уровне модуля;
  • изменить значения переменных.

Когда окно локальных переменных открыто, его обновление происходит автоматически при каждом переключении из режима выполнения в режим прерывания, при пошаговом выполнении процедуры, а также при перемещении по стеку вызова процедур (кнопка Call Stack на рис.17.3).

Окно локальных переменных

Рис. 17.3. Окно локальных переменных

Окно контрольных значений (Watches) (рис.17.4) применяется для отслеживания значений переменных или выражений. Можно одновременно задавать несколько контрольных выражений. Можно использовать контрольные значения для задания моментов остановки программы. Определенное пользователем контрольное выражение позволяет следить в процессе пошагового выполнения программы за изменением значения этого выражения. Контрольные выражения не сохраняются вместе с программой. Для задания и модификации контрольных выражений используются команды Add Watch, Edit Watch и Quick Watch из меню Debug. В команде Add Watch можно задать контекст контрольного выражения (Context), т. е. имя процедуры, имя модуля, имя текущего проекта, для которых будет вычисляться введенное выражение. Таким образом, контекст выводимого значения выражения определяется процедурой и модулем.

Окно контрольных значений

Рис. 17.4. Окно контрольных значений

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

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

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

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

Для запуска пошагового режима можно нажать одну из кнопок Debug панели инструментов Debug (рис. 15.8) или выполнить соответствующие команды из меню Debug. Трассировку можно выполнять с начала программы или с точки останова после прерывания программы. При трассировке на вертикальной полосе слева от выполняемого оператора расположена стрелка – указатель выполняемого оператора.

< Лекция 16 || Лекция 17 || Лекция 18 >
Аннна Миллер
Аннна Миллер
Екатерина Дмитриева
Екатерина Дмитриева