- •Основы алгоритмических языков программирования Понятие о языках программирования. Современные языки программирования высокого уровня
- •Лексические единицы языков программирования
- •Интегрированные среды разработки программ
- •История развития технологии vba
- •Интегрированная среда разработки vba
- •Составные части vba-проекта. Добавление пользовательского кода
- •Вывод отладочных сообщений. Пошаговое выполнение и инструменты отладки
- •Концепция памяти. Переменные и их декларация в языках программирования
- •Управляющие структуры выбора
- •Структурные операторы в алгоритмических языках программирования
- •Данная логическая операция имеет следующую таблицу истинности, в которой «0» соответствует значению false, а «1» – true (табл 1).
- •Остальные логические операторы являются двухоперандными. Операция логического умножения and имеет следующую таблицу истинности (табл 2):
- •Наконец операция логического исключающего или представляется следующей таблицей истинности (табл 4):
- •Реализация управляющих структур выбора в vb
- •Циклические управляющие структуры
- •Реализация циклических управляющих структур в vb
- •Цикл с постусловием имеет похожий синтаксис:
- •Основные положения процедурного программирования
- •Реализация процедурного программирования в Visual Basic
- •Фундаментальные структуры данных
- •Массивы в vb
- •Агрегация разнородных типов. Структурные типы данных
- •Тип данных определяемый пользователем в vb
- •Основы объектно-ориентированного программирования
- •Реализация основных идей объектно-ориентированного программирования в языке vb. Поля и методы. Конструирование объекта класса. Адресная природа объекта класса
- •Свойства и события в vb. Связь объекта класса и его клиентов
- •Интерфейс класса в vb и его наследование
Вывод отладочных сообщений. Пошаговое выполнение и инструменты отладки
Подпрограмма может быть запущена на исполнение также с использованием окна непосредственного исполнения. Этот инструмент интегрированной среды предназначен для вывода отладочных сообщений(debug message) во время исполнения программы, а также позволяет вводить и исполнять простые операторы (присваивания и вызова подпрограмм). Окно непосредственного исполнения вызывается с помощью командыView | Immediate Window. Для запуска подпрограммы необходимо указать идентификатор подпрограммы и нажать на клавишу ENTER (рис. 7).

Рис. 7. Использование окна ImmediateWindow для запуска подпрограмм
Следует отметить, что подпрограммы в окне непосредственного исполнения могут быть запущены только из простого модуля или модуля объекта текущего документа (например, из модуля ThisDocument). В последнем случае должен быть задан полный идентификатор подпрограммы, то есть с указанием имени модуля.
Окно непосредственного исполнения имеет огромное значение для тестирования и отладки проекта в среде VBA, поскольку, как уже упоминалось, позволяет выводить служебные отладочные сообщения (то есть фактически не имеющие отношения к пользователю программы) в ходе работы программы.
Рассмотрим простой пример, в котором показан вывод сообщений в окно непосредственного вывода:
Public Sub UsingImmediateWindow()
Dim i As Integer, s As Integer
For i = 0 To 10 ' перебираем в цикле переменную i
s = s + I ' находим сумму i
' выводим в Immediate Window значение i и s
Debug.Print "i ="; i, "s ="; s
Next
End Sub
Окно непосредственного исполнения позволяет программисту выводить промежуточные результаты работы программы, а также реализовать простейшие средства контроля за потоком ее исполнения. Для вывода сообщения в это окно в тексте подпрограммы должен быть указан вызов метода Print объекта Debug, который определен в ядре VBA. В качестве параметров метода Print могут быть указаны литералы, переменные и свойства объектов, разделенные символами «,» или «;». Назначение разделителей в этом методе совпадает с их назначением в операторе Print классического BASIC. Подпрограмма VBA-проекта может быть исполнена впошаговом режиме(stepping). В этом случае после исполнения очередного оператора процесс останавливается до тех пор, пока не будет активизирована команда на исполнение следующей строки программы. Запуск текущей подпрограммы в пошаговом режиме осуществляется с помощью командыDebug | Step Into. Текущая исполняемая инструкция выделяется цветом (по умолчанию желтым), а на левой границе окна редактора кода (полоса индикаторов) отображается индикатор пошагового исполнения (рис. 8).Для продолжения исполнения подпрограммы в пошаговом режиме должна быть повторно активизирована командаStep Into(с заходом в подпрограммы, вызываемые из текущей подпрограммы) илиStep Over(с обходом внутренних подпрограмм). В ходе пошаговой отладки можно наблюдать за изменениями содержимого переменных, указывая на них курсором (рис. 9). Такое пошаговое исполнение, в ходе которого разработчик наблюдает за изменениями переменных и свойств объектов программы для получения сведений о ее оптимизации или устранения ошибок в ней, принято называтьотладкой(debugging). Отладка кода позволяет, детально проследив за ходом исполнения кода, обнаруживать логические ошибки в программе, то есть ошибки, не связанные с неверным синтаксисом, а обусловленные неверно построенным алгоритмом.

Рис. 8. Пошаговое исполнение кода программы
Основными инструментами отладки являются Окно наблюдения(Watch Window) иОкно локальных переменных(Locals Window). Окно наблюдения, которое может быть активизировано командойView|Watch Window, позволяет разработчику добавить к списку переменные для наблюдения за их изменениями в ходе пошагового исполнения (рис. 9).

Рис. 9. Наблюдение за переменными в окне Watch Window
Аналогичные функции имеет окно локальных переменных (View |LocalsWindow), однако в нем автоматически отображаются только локальные внутренние переменные текущей исполняемой подпрограммы. Еще одним важнейшим средством отладки программ являютсяточки останова(breakpoints). Точка останова – это способ указания интегрированному отладчику на необходимость перехода исполнения программы к пошаговому режиму в заданной строке программы. Для установки точки останова необходимо указать курсором в редакторе кода на нужную строку программы и выбрать командуDebug|ToggleBreakpoint или указать одинарным щелчком на позицию в области полосы индикаторов. Наличие ассоциированной точки останова отображается в полосе индикаторов закрашенным кружком (по умолчанию темно-красного цвета) (рис. 10).

Рис. 10. Определение точки останова
Рассмотрим в качестве примера работы с точками останова простейшую программу, в которой в цикле генерируется 100 случайных чисел и определяется, сколько их них кратны числу 7.
Public Sub BreakpointTest()
Dim i As Integer, r As Integer, s As Integer
' инициализация генератора псевдослучайных чисел
Randomize
' формируем 100 чисел
For i = 0 To 100
r = CInt(Rnd * 100 + 1)
' и посчитаем сколько из них без остатка делятся на 7
If r Mod 7 = 0 Then
s = s + 1
End If
Next
End Sub
Определим точку останова в строке подпрограммы, как это показано на рис. 1.9. Откроем окно наблюдения и добавим для просмотра переменные i,rиs, используя для этого командуDebug|Add Watchи введя в открывшемся диалоговом окне Add Watch идентификатор переменной (рис. 11).

Рис. 11. Диалоговое окно добавления переменных и выражений
в окно наблюдения
Запустив программу на исполнение, можно наблюдать переход в пошаговый режим, когда новое значение переменной rстанет впервые кратным 7. При переходе к режиму пошагового исполнения в окне наблюдения можно будет просмотреть актуальное содержимое указанных переменных. Для возобновления нормального режима исполнения программы необходимо повторно выбрать командуRun |Run Sub/UserForm. Далее исполнение будет прерываться в точке останова всякий раз, когда значениеrвновь станет кратным 7.
Точка останова необязательно должна быть ассоциирована с конкретной строкой программы. Создать такую неявную точку останова можно, если переменной, указанной в списке окна наблюдения, назначить опцию BreakWhenValueChanges(прерывать при изменении значения) в диалоговом окнеAddWatch(рис. 11). Это можно сделать как для вновь добавляемой переменной, так и для ранее указанной в списке с помощью командыDebug| Edit Watch. Активизация такой точки останова происходит всякий в ходе работы программы когда изменяется значение ассоциированной переменной.
Получив начальные представления об инструментах разработки программ продолжим дальнейшее изучение синтаксиса, семантики, информационной и операционной модели языков программирования на примере ранее упоминавшегося языка VisualBasic.
