Run to Cursor

При пошаговом выполнении кода можно выполнить блок кода целиком до того места, где находится курсор. Такая опция полезна при работе в пошаговом режиме, когда необходимо перейти к следующему разделу кода. Одним из примеров может служить цикл. Проверив цикл несколько раз в пошаговом режи­ме, чтобы убедиться в его правильной работе, можно перевести курсор в конец цикла и выбрать в меню команду Debug | Run to Cursor (Отладка | Выполнить до курсора) или нажать клавиши Ctrl+F8.

Set Next Statement

При пошаговом выполнении кода можно установить следующий оператор, который необходимо вы­полнить. Для этого нужно щелкнуть правой кнопкой мыши на той строке кода, которую необходимо выполнить следующей. Затем в контекстном меню следует выбрать пункт Set Next Statement (Установить следующий оператор).

Продолжение выполнения кода

После тестирования кода в пошаговом режиме можно продолжить выполнение кода с нормальной скоростью. Для этого в меню необходимо выбрать команду Run | Continue (Выполнить | Продолжить) или нажать клавишу F5.

Повторное выполнение кода

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

Определение значений переменных

При отладке приложения значение переменной можно определить, если задержать указатель мыши над соответствующей переменной, находясь в режиме прерывания (рис. 8).

РИСУНОК 8. Определение значения переменной в режиме прерываний.

Для получения значения переменной можно также воспользоваться окном Immediate. Например, сле­дующий текст, введенный в окне отладки, возвращает значение переменной с именем strName:

? strName

Использование технологии IntelliSense при отладке

При возникновении программной ошибки и обнаружении некорректной строки кода можно проверить синтаксис с помощью IntelliSense. Технология IntelliSense упрощает разработку, предлагая возможные свойства и методы объектов по мере ввода кода. Например, после ввода имени объекта (например, Recordset или Application) можно ввести точку и проверить, использовано ли правильное имя и написа­ние данного свойства или метода. Если в раскрывающемся списке свойство или метод не отображается, возможно, это говорит о том, что синтаксис не верен.

Использование окна Locals

Окно Locals (Переменные) отображает выражения, значения и типы всех переменных, находящихся в области видимости (рис. 9). Чтобы открыть окно переменных, необходимо в меню выбрать команду View Locals Window (Вид | Окно переменных).

РИСУНОК 9. Окно Locals отображает переменные в текущей области видимости

СОВЕТ

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

Использование окна Watch

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

Сначала необходимо выбрать в меню пункты Debug | Add Watch (Отладка | Добавить для просмотра). В диалоговом окне Add Watch необходимо ввести выражение, за которым нужно установить наблюдение (например, strName = "Smith"). Кроме того, в диалоговом окне нужно указать, следует ли оценивать данное выражение в определенных процедурах, модулях или во всем приложении (рис. 10). Здесь же нужно указать Watch Type (Тип наблюдения):

• Watch Expression — отслеживать выражение

• Break When the Value is True — остановить выполнение кода в режиме прерываний, если выраже­ние истинно

• Break When Value Changes — остановить выполнение кода в режиме прерываний, когда значение выражения изменяется

РИСУНОК 10. Использование Оии-югового окна Add Watch для установки наблюдения за выражением.

Для быстрой установки наблюдения за выражением можно выделить выражение в тексте кода. Затем в меню необходимо выбрать команду Debug | Quick Watch (Отладка | Быстрый просмотр) или нажать клавиши Shifi+F9. В диалоговом окне Quick Watch необходимо щелкнуть на кнопке Add (Добавить) (рис. 11)

РИСУНОК 11. Использование диалогового окна Quick Watch

Просмотр в окне Call Stack

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

Окно вызова стека можно представлять себе следующим образом. При выполнении кода точка наблюдения передвигается в будущее. Call Stack представляет собой окно истории. Оно показывает, какие процедуры уже были выполнены (рис. 12). Чтобы открыть окно Call Stack, необходимо в меню выбрать команду View | Call Stack (Вид | Вызов сте­ка) или использовать комбинацию клавиш Ctrl+L.

РИСУНОК 12. Окно Call Stack используется для отображения списка выполненных процедур

СОВЕТ

Для перехода к определенной процедуре можно выбрать ее в окне Call Stack и щелкнуть на кнопке Show (Показать) (или просто дважды щелкнуть на процедуре).

Использование условной компиляции

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

Гораздо удобнее создать единственную версию приложения, которая по-разному выполняется при разных обстоятельствах. Можно выбрать, какая часть кода в приложении компилируется или выполняется в за­висимости от обстоятельств.

В качестве примера допустим, что в Лос-Анджелесском отделении предприятия должна выполняться некоторая часть кода, которая не выполняется ни в одном из других отделений. Во-первых, необходимо выбрать константу для данного отделения, например, LA. Константу нужно ввести как аргумент условной компиляции для приложения. В редакторе Visual Basic в меню необходимо выбрать команду Tools | Apllication's Properties (Сервис | Свойства приложения). Откроется диалоговое окно Project Properties (Свой­ства проекта). Нужно выбрать вкладку General (Общие). В поле Conditional Compilation Arguments (Аргу­менты условной компиляции) необходимо ввести LA = -I. Данное выражение позволяет установить константу равной True.

Теперь можно ввести код, который выполняется только для версии LA приложения. Для этого необ­ходимо записать код в конструктив условной компиляции. Например:

#If LA Than

' Данный код выполнятся в IA-версии приложения.

#End If

Кроме того, условная компиляция может оказаться полезным средством отладки. Если необходимо часто комментировать разделы кода, нужно установить аргумент условной компиляции fComment = -1. Данный флаг комментария теперь можно использовать в конструктиве условной компиляции для комментирова­ния разделов кода:

#If fComment Then

' Выполняется данный код.

#End If

Создание надежного кода

Не существует способа, который позволил бы избежать отладки приложений. Однако, если придержи­ваться следующих указаний, можно увеличить степень надежности кода и устранить ошибки.

Объявление переменных в отдельных строках кода

Гораздо проще проверить, объявлена ли переменная, просматривая переменные, записанные в отдель­ных строках кода, а не в одной длинной текстовой строке. Кроме того, данный подход позволяет избе­жать проигрыша в скорости.

СОВЕТ

Кроме того, группировка объявляемых переменных по типу данных также упрощает обращение к переменным.

Объявление переменных в минимальной области действия

Рекомендуется как можно чаще использовать локальные переменные. Это не только предотвращает возникновение проблем, связанных с областью действия, но и повышает скорость выполнения приложе­ний.

Использование специфических типов данных

Рекомендуется всегда объявлять тип данных и использовать наименьший по занимаемому объему тип данных. Если тип данных не объявлять, используется тип Variant. Это не только неэффективно из-за дополнительных требований к ресурсам, но и может стать причиной появления программных ошибок, поскольку любой тип данных можно присвоить переменной типа Variant. Например, если переменная должна хранить только числа и при этом использован тип Variant, может возникнуть ошибка, когда с пе­ременной используются данные, отличные от чисел, или объекты.

Разрушение объектных переменных

Разрушение объектных переменных позволяет уменьшить вероятность ошибок ресурсов. Если существует объектная переменная с именем objWord, необходимо разрушить ее в конце процедуры с помощью выражения Set objWord = Nothing.

Использование зарезервированного слова TypeOf

Часто можно передавать элементы управления в общую процедуру. Например, можно передать список и поле со списком в общую процедуру, которая загружает значения с помощью метода Addltem. Если передавать элемент управления, который не является ни списком, ни полем со списком (например, командная кнопка), возникнет ошибка, поскольку данный элемент управления не содержит метод Addltem. В процедуре для проверки типа элемента управления и устранения ошибки используется зарезервирован­ное слово TypeOf.

Использование ключевого слова Me вместо Screen.ActiveForm и Screen.ActiveControl

При отладке приложения ключевым окном является окно Immediate. Таким образом, методы Screen.ActiveForm и Screen.ActiveControl не будут работать. Вместо них для обращения к текущей форме используется ключевое слово Me.

Использование обработчика ошибок

При возникновении ошибки обработчик ошибок может помочь сэкономить время и обнаружить опе­ратор, ставший причиной сбоя, выдать информацию о типе ошибки, номере строки и т.д. Более подробная информация об обработчике ошибок приведена в статье «Профессиональная обработка ошибок».

Использование Option Explicit

Рекомендуется производить явное объявление всех переменных, использовав опцию Option Explicit в начале каждого модуля. По умолчанию эту опцию можно установить, выбрав опцию программы Require Variable Declaration (Требовать объявления переменных). Объявляя все переменные, можно избежать ошибок, связанных с неправильным написанием имен переменных.

Отсчет с 0 или 1?

В VBA для одних элементов отсчет начинается с 0, а для других — с I. Например, массивы начинают отсчет с 0, а множества — с 1. Если неизвестно, с какого значения начинается нумерация, это необхо­димо обязательно выяснить. Неправильная догадка может стать причиной ошибки.

Немедленное исправление ошибок

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: