Работа с отладчиком visual basic
Call mW.Long1(r, nCancel) ‘Обращение к методу Long1
Text2 = nCancel ‘Выводим значение, возвращаемое из события
Set mW = Nothing
End Sub
Private Sub Form_Load()
Text1 = Format(r, "0 %")
Text2 = ""
End Sub
Private Sub mW_MTS(ByVal Percent As Single, _
Cancel As Boolean)
m% = CInt(100 * Percent)
Text1 = m & "%"
If m >= 50 Then Cancel = True
End Sub
11. Работа с отладчиком Visual Basic. Окна Watch, Immediate.
Редактор Visual Basic является средой разработки и редактирования программ на языке Visual Basic. Как и все современные средства разработки программного обеспечения, редактор Visual Basic содержит мощные средства для облегчения написания кода, а также средства для поиска и устранения ошибок. Начиная с версии 2000 года, редактор Visual Basic является отдельным приложением, которое имеет свою строку меню и панель инструментов. Кроме того, в его состав входят семь вспомогательных окон, облегчающих управление проектом, навигацию и поиск объектов, их свойств, методов, а также отладку и оптимизацию программных процедур.
Кроме вспомогательных окон, редактор Visual Basic может содержать любое количество открытых окон модулей (или окон кода) (Code Window), которые содержат непосредственно код программы на Visual Basic. При открытии редактора Visual Basic по умолчанию вместе с ним открываются два вспомогательных окна — окно проекта (Project Explorer Windows) и окно свойств (Properties Windows), а также как минимум одно окно модуля (Code Window). Остальные вспомогательные окна доступны через меню Вид (View), соответствующие кнопки панели инструментов и пункты контекстного меню. При отладке могут использоваться три вспомогательных окна — Непосредственной отладки (Immediate Window), Локальных переменных (Locals Window) и Контрольных выражений (Watch Window). Окно непосредственной отладки (Immediate Window), как и другие отладочные окна, используется для проверки значений переменных или выражений. Для этого можно воспользоваться командой Debug. Print <выражение>, вставляя ее в интересующих участках кода. По мере выполнения программы в окне будут отображаться значения заданных выражений (или переменных). Второй вариант — вводить команду Print <выражение> (или? <выражение>) по мере необходимости непосредственно в окно, когда программа находится в режиме прерывания (Break Mode). После нажатия на клавишу <Enter>, в следующей строчке появится значение заданного выражения. Окно непосредственной отладки, кроме того, можно использовать для задания значения какой-либо переменной или свойства. Для этого используется синтаксис имя_переменной = <выражение>.
Естественно, все переменные, используемые в окне, должны быть доступны в момент вычисления. Например, если вы указываете имя элемента управления какой-нибудь формы, то эта форма должна быть, как минимум, открыта.
Следующее отладочное окно — окно локальных переменных (Locals Window) используется для отображения промежуточных значений всех локальных переменных и свойств, доступных в активном объекте Например, окно локальных переменных (Locals Window), открытое для формы Поставщики (Suppliers), в точке останова в теле обработчика события ПередОбновлением (BeforeUpdate). В центре окна локальных переменных расположена таблица, содержащая три столбца Выражение (Expression), Значение (Value) и Тип (Туре) Столбец Выражение (Expression) содержит наименования всех переменных и свойств объекта, расположенных в виде иерархического списка. Если речь идет о модуле класса (например, формы или отчета), то во главе этого иерархического списка стоит ключевое слово Me. Me — это системная переменная, используемая для ссылки на активный объект (например, форму или отчет).
Второй столбец таблицы (Значение (Value)) содержит значение расположенного слева элемента, а столбец Тип (Туре), как ни странно, содержит его тип ни одну из величин, приведенных в таблице, редактировать нельзя.
Окно локальных переменных (Locals Window) используется только в режиме останова программы (Break Mode) Исполняя программу в пошаговом режиме, можно наблюдать, как изменяются значения переменных и свойств объекта. Удобство использования этого отладочного окна заключается в том, что можно одновременно наблюдать за изменением большого количества свойств объекта по мере выполнения программы.
Третье отладочное окно — окно контрольных выражений (Watch Window) используется для проверки значений указанных в этом окне выражений. Это окно очень напоминает окно локальных переменных (Locals Window). В центре его расположена таблица, состоящая из четырех столбцов. Смысл и наименования первых трех столбцов соответствуют первым трем столбцам таблицы окна локальных переменных (Locals Window). Четвертый столбец называется Контекст (Context). В этом столбце указывается, на каком уровне описана переменная. Если переменная описана в процедуре, то здесь фигурирует наименование модуля и наименование процедуры; если переменная является общей для модуля (глобальной), столбец содержит наименование модуля.
12. Оператор On Error. Методы объектов Debug. Условная компиляция. Примеры
Как правило, отладка — это проверка работы и исправление ошибок программистом перед передачей проекта на тестирование.
Инструментарии отладки позволяет проконтролировать избранные участки кода приложения для локализации ошибки, выполняя приложение по шагам, останавливаясь в точках останова, дает возможность проверить значения переменных, свойств объектов и другую интересующую информацию и выяснить, таким образом, источник ошибки.
В набор инструментария отладки Visual Basic 6 входят такие основные инструменты, как:
- панель инструментов Debug (Отладка) с кнопками команд для выполнения отладки приложения; окно Immediate (Непосредственное выполнение), предназначенное для непосредственного ввода команд, требующих немедленного выполнения; окно Watches (Наблюдение), предназначенное для просмотра значений выражений, включенных в список просмотра; окно Locals (Локальные), предназначенное для просмотра значений переменных; редактор кода со встроенными возможностями просмотра переменных, констант, свойств, выражений при отладке приложения в точках останова и пошаговом выполнении приложения; окно Call Stack (Стек вызовов) для просмотра вызванных, но незавершенных процедур.
Панель инструментов Debug (рис. 10.4) активизируется при выборе из меню View (Вид) команды Toolbars (Панели инструментов), а затем значения Debug (Отладка).
На панели инструментов Debug находятся кнопки, обеспечивающие работу по отладке приложения. Назначение этих кнопок описано в табл. 10.3.
Таблица 10.3. Кнопки панели инструментов Debug
Кнопка |
Название |
Назначение |
Start/Continue (Продолжить) |
Запускает программу или продолжает ее выполнение после прерывания |
|
Break (Остановка) |
Вызывает прерывание программы в необходимом месте (без использования точек останова) |
|
End(Завершение) |
Завершает выполнение программы |
|
Toggle Breakpoint (Установить точку останова) |
Устанавливает точку останова на текущей строке кода |
|
Step Into (Шаг с заходом в процедуры) |
Осуществляет пошаговое выполнение процедуры, включая также вызываемые ею процедуры |
|
Step Over (Шаг без захода в процедуры) |
Осуществляет пошаговое выполнение процедуры без трассировки вызываемых ею процедур |
|
Step Out (Шаг с выходом из процедуры) |
Выполняет пошаговое выполнение текущей процедуры до выхода из нее |
|
Locals Window (Окно Locals) |
Открывает диалоговое окно Locals для контроля значений переменных |
|
Immediate Window (Окно Immediate) |
Открывает окно Immediate для ввода и выполнения команд |
|
Watch Window (Окно Watch) |
Открывает диалоговое окно Watches для просмотра выражений, включенных в список наблюдения |
|
Quick Watch (Быстрый просмотр) |
Открывает окно Quick Watch для просмотра выражения и значения, которое оно возвращает в данный момент в точке останова программы или на определенном шаге при пошаговом запуске программы |
|
Call Stack (Стек вызовов) |
Открывает окно Call Stack, в котором представлен список выполняемых процедур |
С остальными инструментами вы сможете познакомиться при рассмотрении процесса отладки. Откройте любое из ранее разработанных приложений, например приложение для изучения записи/чтения данных из файла. Установите точку останова в процедуре записи данных. Для этого щелкните кнопкой мыши, установив указатель в сером вертикальном поле редактора кода напротив интересующей строки, или выполните команду Toggle Break-point (Установить точку останова) меню Debug (Отладка). При этом в сером вертикальном поле рядом с выбранной командой устанавливается жирная точка (рис. 10.5), остановка выполнения программы произойдет именно в этом месте кода.
При запуске программы в точке останова выполнение программы приостанавливается и для контроля работы приложения можно использовать весь отладочный инструментарий: просматривать значения переменных и выражений при позиционировании маркера на выбранной переменной или выражении (рис. 10.6).
Для более тщательного контроля работы приложения можно использовать окна просмотра: Immediate (Немедленное выполнение), Watches (Наблюдение), Locals (Локальные), Quick Watch (Быстрый просмотр). Call Stack (Стек вызовов).
Кроме прямого ввода и выполнения команд, окно Immediate служит для выяснения значения переменных и выражении. Для этого необходимо выполнить команду? с указанием интересующего выражения, как это показано на рис. 10.7. Значение выражения выводится в следующей строке этого же окна.
При работе с окном Immediate удобно использовать объект Debug и его метод print. В режиме запуска метод Debug. Print выводит текстовое сообщение в окне Immediate. Синтаксис этого метода очень простой:
Debug. Print StringMessage где StringMessage — текст выводимого в окно Immediate сообщения.
В окне Locals можно просмотреть все переменные и их значения, используемые в данный момент приложением (рис. 10.8)
Основным окном для просмотра значений выражений является окно Watches (рис. 10.9). В этом окне можно проконтролировать любое выражение из списка введенных для проверки.
Список проверяемых выражений пополняется в диалоговом окне Add Watch (рис. 10.10), открываемом командой Add Watch (Добавить наблюдение) контекстного меню редактора кода или одноименной кнопкой на панели инструментов Debug (Отладка). Для добавления выражения в список контролируемых необходимо ввести его в текстовое поле Expression (Выражение) этого окна.
Замечание
Если в тексте кода выделить выражение, то при вызове окна Add Watch это выражение по умолчанию вставляется в поле Expression.
Область Context диалогового окна Add Watch позволяет установить область видимости переменных, наблюдаемых в выражении. Раскрывающийся список Procedure (Процедура) задает видимость внутри процедур, а список Module (Модуль) — внутри программных модулей.
Переключатель Watch Type (Тип просмотра) определяет, как Visual Basic реагирует на наблюдаемое выражение. При установке опции Watch Expression (Выражение наблюдения) значение выражения отображается в диалоговом окне Watches в режиме прерывания. Опция Break When Value Is True (Приостановить при равенстве выражения значению Истина) автоматически задает режим прерываний и обращение к контролю выражений при условии равенства выражения значению True или ненулевому значению для числовых выражений. Опция Break When Value Changes (Приостановить при из менении значения выражения) аналогична опции Break When Value Is True, но приложение входит в режим прерывания при изменении значения выражения.
В дополнение к окну Watches, для просмотра выражений можно использовать окно Quick Watch (Быстрый просмотр) для быстрого доступа к значению выражения (рис. 10.11). Для этого окна не требуется вводить список контролируемых выражений, а достаточно выделить интересующее выражение в тексте кода и вызвать окно Quick Watch одноименной кнопкой на панели инструментов Debug,
Для контроля выполняемых процедур используется окно Call Stack (Стек вызовов), в котором показаны все вызванные и активные в данный момент процедуры (рис. 10.12).
Из окна Call Stack можно перейти к коду программы (рис. 10.13), откуда был выполнен вызов выбранной в списке процедуры, с помощью кнопки Show (Показать). На рис. 10.13 показано место вызова процедуры, выбранной в окне Call Stack (рис. 10.12).
Обработка ошибок
Обработка ошибок и неправильных действий пользователя — обязательная составляющая любого проекта. Для работы с ошибками в Visual Basic 6 есть специальный оператор on Error.
Существует несколько вариантов синтаксиса этого оператора. Первый вариант имеет вид:
On Error Go To StringLabel
где StringLabel — метка оператора. Она должна быть уникальной в пределах процедуры.
Метка оператора — это любое текстовое значение, начинающееся с буквы и завершающееся двоеточием. В этом варианте синтаксиса при возникновении ошибки программа будет переходить к оператору, следующему непосредственно за меткой StringLabel. Например, приведенный ниже код выполняет обработку ошибки:
On Error Go To ErrorLabel
текст кода процедуры ErrorLabel:
Call ErrorProcedure ()
End
В данном случае при возникновении ошибки будет выполняться оператор call ErrorProcedure о, вызывающий процедуру обработки ошибки.
Для игнорирования ошибки необходимо использовать следующий вариант оператора on Error:
On Error Resume Next
Для того чтобы отключить обработку ошибок в какой-либо процедуре, оператор on Error записывается в виде:
On Error Go To 0
При обработке ошибок хорошо бы выдать сообщение о том, что это за ошибка. Для этого предназначены перечисленные ниже встроенные возможности Visual Basic 6:
- служебная переменная Err, которая содержит код ошибки; служебная переменная Error, которая содержит текст системного сообщения об ошибке; объект Err, который содержит одновременно код и сообщение об ошибке.
Для выполнения действии программы после обнаружения ошибки служит оператор Resume, который имеет различные варианты использования. Например:
- Resume Next
При этом выполняется оператор, следующий за оператором с ошибкой.
- On Resume NextLabel
где NextLabel — метка оператора, который будет выполняться после обработки ошибки.
Приведенный ниже код обрабатывает ошибки:
On Error Go To ErrorLabel
текст кода процедуры
ErrorLabel:
Call ErrorProcedure ()
Resume NextStatement
текст кода процедуры
NextStatement:
текст кода
При использовании этого варианта обработки ошибки выполнение программы не остановится, как в случае с предыдущим кодом, а будут выполняться операторы кода, расположенного после метки продолжения работы.
Условная компиляция:
Условную компиляцию можно использовать для отбора определенных частей кода для компиляции, в то время как другие его части исключаются. Например, при необходимости написания инструкций отладки, которые сравнивают скорость выполнения одной и той же задачи при различных подходах, либо при необходимости локализации приложения для нескольких языков. Инструкции условной компиляции разработаны для выполнения во время компиляции, а не во время выполнения.
Объявление константы условной компиляции в коде осуществляется при помощи директивы #Const, а блоки кода для условной компиляции обозначаются директивой #If…Then…#Else. Например, для создания версий одного и того же приложения на французском и немецком языках из одного исходного кода, необходимо внедрить зависимые от платформы сегменты кода в инструкции #If…Then с помощью определенных ранее констант FrenchVersion и GermanVersion. Как это сделать, показано в следующем примере:
Язык Visual Basic
#If FrenchVersion Then
‘ <code specific to the French language version>.
#ElseIf GermanVersion Then
‘ <code specific to the German language version>.
#Else
‘ <code specific to other versions>.
#End If
Если для константы задается FrenchVersion значение True во время компиляции, компилируется условный код для французской версии. Если установить для константы GermanVersion значение True, компилятор использует немецкую версию. Если ни одна константа не имеет значения True, выполняется код в последнем блоке Else. Примечание.