Отладка программ на Visual Basic .NET
В этой лекции вы узнаете, как:
- определять в программах различные типы ошибок;
- использовать инструменты для отладки Visual Studio .NET для установки точек останова и исправления ошибок;
- использовать окно Watch для проверки значений переменных во время выполнения программы;
- использовать окно Command (Окно команд) для изменения значений переменных и исполнения команд в Visual Studio.
В предыдущих лекциях у вас было достаточно возможностей допустить ошибки в программах. В отличие от человеческих диалогов, которые обычно не зависят от случайных грамматических ошибок и неверного произношения, общение между разработчиком программного обеспечения и компилятором Microsoft Visual Basic требует точного соблюдения всех правил и ограничений языка программирования Visual Basic. В этой лекции рассказывается о дефектах программного обеспечения - багах (ошибках) - которые не дают запуститься программам на Visual Basic. Вы узнаете о различных типах ошибок, появляющихся в программах, и о том, какие инструменты отладки Visual Studio .NET предоставляет для обнаружения и исправления этих ошибок. Эти знания будут вам крайне необходимы при написании ваших собственных программ.
Что нового в Visual Basic .NET?
- Visual Basic .NET содержит несколько новых инструментов для поиска и корректировки ошибок. Многие из знакомых команд отладки Visual Basic 6 по прежнему являются частью Visual Studio (Start (Начать), Break (Приостановить), End (Закончить), Next (Следующий оператор), Step Into (Шаг с заходом), Step Over (Шаг с обходом)), но есть также ряд новых инструментов отладки и команд, включая пересмотренную панель Debug (Отладка), команды меню, которые управляют процессами и исключениями, и инструменты, которые поддерживают отладку многоязыких решений.
- В интерфейс пользователя Visual Studio .NET добавлено несколько новых окон отладки, включая Autos (Видимые), Command (Окно команд), Call Stack (Список задач), Threads (Потоки), Memory (Память), Disassembly (Дизассемблированный код) и Registers (Регистры). Вы не будете использовать эти инструменты во время каждой сессии отладки, но они удобны при работе со сложными приложениями.
Поиск и исправление ошибок
Ошибки, с которыми вы до сих пор сталкивались в ваших программах, были просто опечатками, или синтаксическими ошибками. В программах встречаются и более сложные ошибки - такие, которые вы не можете найти, просто просмотрев используемые объекты, свойства и операторы. Среда разработки Visual Studio содержит несколько инструментов, которые помогут вам отследить и исправить ошибки в ваших программах. Эти инструменты не застрахуют вас от совершения ошибок, но облегчат их поиск и исправление.
Три типа ошибок
В программах на Visual Basic могут возникнуть три типа ошибок: синтаксические ошибки, ошибки времени исполнения и логические ошибки.
- Синтаксическая ошибка (или ошибка компиляции) - это программная ошибка (например, неправильно написанное имя свойства или ключевое слово), которая нарушает правила написания программ на Visual Basic. Visual Basic распознает некоторые типы синтаксических ошибок при вводе операторов программы и не позволит запустить программу до тех пор, пока вы не исправите их все.
- Ошибка времени исполнения - это ошибка, которая приводит к неожиданной остановке программы во время ее выполнения. Ошибки времени исполнения возникают, когда программа при выполнении останавливается из-за необнаруженной синтаксической ошибки. Ваш код сгенерирует ошибку времени исполнения, если вы, например, неправильно указали имя файла при использовании метода System.Drawing.Image.FromFile или при попытке считать данные с дисковода гибких дисков, когда в нем нет дискеты.
- Логическая ошибка - это человеческая ошибка - ошибка в программе, которая приводит к тому, что код программы выдает неверные результаты. Большинство усилий при отладке тратится именно на поиск и исправление логических ошибок, совершенных программистом.
Если вы сталкиваетесь с синтаксической ошибкой, то чаще всего вы можете решить проблему с помощью справочной системы Visual Basic, из которой можно получить дополнительную информацию об ошибке, и исправить эту ошибку, уделив дополнительное внимание точному синтаксису используемых вами функций, объектов, методов и свойств. В Редакторе кода неверные операторы подчеркиваются синей волнистой линией. Удерживая указатель мыши над этим оператором, вы можете получить об ошибке дополнительную информацию. На следующей иллюстрации показано сообщение об ошибке, которое появляется в Visual Studio при некорректном вводе ключевого слова Case ("Csae" вместо "Case"). Это сообщение об ошибке выглядит как всплывающая подсказка.
Если вы сталкиваетесь с ошибкой времени исполнения, то сможете решить проблему, исправив вводимые данные. Например, если в объект вывода изображений некорректно загружается растровое изображение, проблема наверняка заключается в неверно указанном пути к файлу. Однако многие ошибки времени исполнения требуют более сложного решения - структурного обработчика ошибок, который является специальным блоком кода программы, распознающим ошибку времени исполнения при ее возникновении. Он подавляет все сообщения об ошибках и подстраивает все условия программы для решения этой проблемы. Новый синтаксис структурных обработчиков ошибок обсуждается в "Перехват ошибок с помощью структурной обработки ошибок" .
Обнаружение логических ошибок
С точки зрения устранения, логические ошибки в программах зачастую являются наиболее сложными. Они - результат неверных предположений и планирования, а не просто неправильного понимания синтаксиса Visual Basic. Рассмотрим следующую структуру выбора If...Then, которая проверяет два условия, а затем, в зависимости от результата, отображает одно из двух сообщений:
If Age > 13 And Age < 20 Then TextBox2.Text = "Вы тинэйджер" Else TextBox2.Text = "Вы не тинэйджер" End If
Можете обнаружить ошибку в этой структуре? Тинэйджер - это человек, которому от 13 до 19 лет включительно, но эта структура не может идентифицировать человека, которому ровно 13 лет. Для этого возраста структура ошибочно отображает сообщение "Вы не тинэйджер". Этот тип ошибки не является синтаксической ошибкой (так как операторы соответствуют правилам Visual Basic); это интеллектуальная - или логическая ошибка. Правильная структура выбора содержит в первом сравнении оператора If Then оператор "больше или равно" (>=), как показано здесь:
If Age >= 13 And Age < 20 Then
Поверите вы или нет, но этот тип ошибок наиболее распространен в программах на Visual Basic.
Отладка 101: использование режима останова
Одним из способов обнаружить логическую ошибку является выполнение кода вашей программы по одной строке и изучение изменения содержимого одной или нескольких переменных. Для этого можно при работе вашей программы войти в режим останова, а затем просмотреть код в Редакторе кода. Режим останова дает возможность просмотреть программу во время ее исполнения компилятором Visual Basic. Это похоже на то, как если бы вы стояли за спиной пилота и наблюдали за тем, как он ведет самолет. Но в нашем случае вы сами можете трогать рычаги управления.
При отладке вашего приложения используется панель инструментов Debug (Отладка) - специальная панель инструментов, предназначенная для поиска ошибок. Эта панель инструментов показана на следующей иллюстрации. Ее можно открыть, выбрав команду Toolbars (Панели инструментов) в меню View (Вид), а затем щелкнув на Debug (Отладка).
В следующем упражнении вы установите точку останова, и используете режим останова для обнаружения и исправления логической ошибки в структуре If...Then. Эта ошибка является частью нормальной программы. Чтобы выявить проблему, вы будете использовать кнопку Step Into (Шаг с заходом), расположенную на панели инструментов Debug (Отладка), а для изучения значений ключевых переменных и свойств программы окно Autos (Видимые). Обратите особое внимание на эту методику отладки. Ее можно использовать для обнаружения и исправления ошибок в ваших собственных программах.