Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно
Лекция 8:

Отладка приложений, обработка ошибок

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >

8.5. Immediate

08-01-Работа с Immediate.docm - пример к п. 8.5.

Окно Immediate (Немедленное выполнение) представляет собой нечто вроде "филиала" редактора кода. Чтобы отобразить его, можно воспользоваться командой View o Immediate Window (Вид o Окно непосредственных изменений). С помощью Immediate можно мгновенно выполнять различные команды, вызывать процедуры и функции - как пользовательские, так и встроенные. Так же в него можно организовать вывод различных данных в ходе выполнения программы. Давайте рассмотрим основные возможности этого окна.

Для отправки в окно Immediate информации из выполняющейся программы нужно воспользоваться такой конструкцией:

Debug.Print

Метод Print объекта Debug организует вывод в Immediate. После того, как выполнение программы завершится, вы сможете проанализировать выведенные данные.

Например, добавим в VBA-проект форму, назовем ее frm_Test, на форму добавим кнопку - cmd_Test. Добавим в код обработчика нажатия кнопки такой код (листинг 8.1.):

Dim TwoDim(4, 5)
    Dim OneDim(30)
    Dim num_Transfer
    For i = 0 To 4
        For j = 0 To 5
            TwoDim(i, j) = Int(Rnd * 100)
        Next j
    Next i
    For i = 0 To 4
        Debug.Print ("i=" + Str(i))
        For j = 0 To 5
            num_Transfer = num_Transfer + 1
            OneDim(num_Transfer) = TwoDim(i, j)
            Debug.Print ("j=" + Str(j))
            Debug.Print ("OneDim" + Str(num_Transfer) + _
                " =" + Str(OneDim(num_Transfer)))
            Debug.Print ("TwoDim" + Str(i) + Str(j) + _
                " =" + Str(TwoDim(i, j)))
        Next j
    Next i
Листинг 8.1. Обработчик события Click кнопки cmd_Test

Здесь мы объявили два массива - один двумерный ( TwoDim ), второй одномерный ( OneDim ). Заполнили TwoDim случайными числами, после чего организовали перенос данных из него в OneDim. В циклическую конструкцию, которая осуществляет перенос данных, мы вставили несколько вызовов Debug.Print. Они позволили нам получить полную картину работы этого блока в окне Immediate (рис. 8.4.).

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

Окно Immediate после вывода значений

Рис. 8.4. Окно Immediate после вывода значений

На рис. 8.5. вы можете видеть окно Immediate, которое содержит несколько команд. Эти команды мы вводили в режиме останова программы из листинга 8.1.

Работа с Immediate в режиме останова

Рис. 8.5. Работа с Immediate в режиме останова

Команда Print frm_Test.Caption вывела свойство Caption формы frm_Test в окно. Как видите, Immediate предлагает справку по объектам точно так же, как и обычный редактор. Далее, обратите внимание на то, что вместо команды Print можно использовать знак ?. Если вы программировали на обычном Basic'e, этот значок должен быть вам хорошо знаком.

Командой ? 25*14-4+11^7 мы вычисляем введенное выражение.

Командой ? TwoDim(1, 1) мы выводим число, хранящееся в TwoDim(1, 1). В нашем случае это 76. После этого мы записываем команду TwoDim(1, 1)=11, тем самым присваивая элементу массива новое значение, и выводим это значение снова.

Теперь рассмотрим возможности по запуску процедур и функций. Создадим в коде формы простую процедуру с именем hello, которая выводит окно сообщения с текстом "Привет". Чтобы вызывать эту процедуру, не выполняя программу, достаточно ввести в окно Immediate такой код: frm_Test.hello. Вот, как выглядит окно после ввода команды (рис. 8.6.).

Окно кода с пользовательской процедурой и Immediate после ввода команды

Рис. 8.6. Окно кода с пользовательской процедурой и Immediate после ввода команды

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

Как видите, Immediate - это очень простое, но мощное средство отладки. Однако, его неудобно использовать для быстрого просмотра множества свойств элементов управления, значений многих переменных и т.д. В подобных случаях нам может помочь окно Locals.

8.6. Locals

Окно Locals (Локальные переменные) позволяет просматривать и изменять свойства всех объектов приложения и значения переменных. Посмотрите, как выглядит окно Locals при открытии его в режиме останова программы, с которой мы работали в п. 8.5. (рис. 8.7.)

Окно Locals открытое при останове программы

Рис. 8.7. Окно Locals открытое при останове программы

Как видите, здесь есть объект Me, который представляет собой форму, массивы, объявленные в коде, переменные. Для посмотра или редактирования свойств объектов и содержимого массивов, достаточно развернуть их описания, нажав на знак + перед их наименованиями. Для редактирования значения нужно просто выделить его и ввести вместо старого новое. Учтите, что строковые значения нужно вводить в кавычках - так же, как и в программном коде.

8.7. Watches

Окно Watches (Контролируемые выражения) предназначено для контроля за отдельными выражениями, значениями переменных и т.д.

Чтобы добавить такое выражение, щелкните мышью по нему и выберите команду меню Add Watch (Контролировать). Появится окно Add Watch (рис. 8.8.).

Окно Add Watch

Рис. 8.8. Окно Add Watch

Здесь, в поле Expression (Выражение) нужно ввести контролируемое выражение. В нашем случае это имя переменной.

В группе параметров Context (Контекст) следует выбрать область контроля. Чем эта область меньше (в нашем случае - это процедура cmd_Test_Click, которая хранится в модуле формы frm_Test ) - тем лучше.

В группе параметров Watch type (Тип наблюдения) нужно выбрать тип наблюдения за выражением.

Watch Expression (Наблюдать за выражением) - программа просто выводит в окно Watch значение наблюдаемого выражения, ничего не предпринимая. Если вы перейдете в режим отладки, то сможете просмотреть это выражение.

Break When Value Is True (Прервать работу программы если выражение выполняется) - при выполнении определенного в окне Add Watch условия программа остановится и перейдет в режим отладки. Например, если мы напишем в поле Expression выражение num_Transfer > 100 и активируем данный пункт, то работа программы будет остановлена лишь тогда, когда значение переменной num_Transfer превысит 100.

Break When Value Changes (Прервать работу программы при изменении значения) - прерывает выполнение программы если значение контролируемой переменной или выражения изменилось. Если мы сделаем эту опцию активной, при каждом изменении переменной программа будет переходить в режим отладки. Установим эту опцию и запустим программу. При первом же изменении переменной num_Transfer мы попадем в режим отладки (рис. 8.9.).

Работа с окном Watches в режиме отладки

Рис. 8.9. Работа с окном Watches в режиме отладки

Как видите, в окне Watches отображены следующие данные:

  • Expression - контролируемое выражение.
  • Value - значение выражения.
  • Type - тип данных.
  • Context - контекст (область контроля).

При необходимости вы можете отредактировать контролируемое выражение - для этого щелкните правой кнопкой мыши по строке выражения в окне Watches и выберите пункт Edit Watch. Для удаления выражения выберите в том же меню пункт Delete Watch, для добавления нового - Add Watch.

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Евгений Ушаков
Евгений Ушаков
О стоимости курса
Александр Новиков
Александр Новиков
Справочник по объектам VBA
Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Михаил Алексеев
Михаил Алексеев
Россия, Уфа, УГАТУ, 2002