Отладка объектно-ориентированных программ
Результат работы программы показан на рис. 4.11. Конечно, это совсем не то, что мы ожидали получить.
Рис. 4.11. Результат работы программы с ошибкой
В подобных ситуациях программу приходится отлаживать. Один из способов отладки описан ниже.
- Нажмите кнопку Break в диалоговом окне, показанном на рис. 9.11.
- Закройте окно (в данном примере – консольное), чтобы вернуться в IDE.
Установите точку прерывания (F9) в позиции, с которой должен начаться анализ состояния различных объектов программы, – в нашем примере логично установить ее в строке, предшествующей той, в которой произошло исключение (строка 9 листинга). Запустите программу командой Debug › Start (клавиша F5). Откройте окно локальных переменных и выведите его на передний план. На рис. 4.12 показано, как выглядит это окно. Рядом с именами объектных переменных aLink и aLinkedList расположены значки "+", на которых так и хочется щелкнуть.
Рис. 4.12. Окно локальных переменных в начале сеанса отладки.
Поскольку объектная переменная aLink соответствует третьей ссылке, очевидно, ссылка на предыдущий элемент не должна быть равна Nothing. Это наводит на мысль, что мы должны повнимательнее присмотреться к коду, в котором присваивается значение ссылки на предыдущий элемент.
Friend Sub New(ByVal myParent As Link. ByVal theData As String) m_MyData = theData m_ParentLink = Me m_NextLink = myParent End Sub
Оказывается, мы перепутали операции присваивания ссылок и забыли задать ссылки из предыдущего элемента списка на текущий. Исправленный вариант этой функции должен выглядеть так:
Friend Sub NewtByVal myParent As Link, ByVal theData As String) m_MyData = theData m_ParentLink = myParent m_ParentLink.m_NextLink = Me End Sub
Возможности отладки не ограничиваются использованием окна локальных переменных. Например, вы можете установить условную точку прерывания по условию aLink Is Nothing или воспользоваться командой Add Watch контекстного меню в окне программы, когда программа находится в режиме прерывания. Впрочем, независимо от того, какой путь будет выбран, центральное место в процессе отладки занимает анализ состояния объектов.
Итоги
Глава получилась очень длинной. В ней вы познакомились с некоторыми встроенными классами .NET Framework, но главной темой была специфика работы с объектами в VB.NET. По сравнению с прежними версиями VB в этой области произошло много изменений, в основном принципиальных. В частности, были рассмотрены параметризованные конструкторы, значительно повышающие надежность создания объектов и их инициализацию. Короче говоря, в этой главе был изложен базовый материал, абсолютно необходимый для дальнейшего освоения VB.NET.