Налагодження за допомогою засобів візуалізації відладчика (Debugger Visualizers) Visual Studio 2005 - все
Written on 24 Грудня 2008 . Posted in Розробка та тестування
ЗМІСТ
Visual Studio 2005 має чотири засоби візуалізації: DataSet, який відображає вміст DataSet в табличній сітці, і трьома текстовими засобами візуалізації - один для тексту, другий для XML і третій для HTML. Наступне зображення демонструє дію засобу візуалізації для XML, який надає більш читальний вигляд XML-коду, порівняно з простим вміщенням його в один рядок.

Що найцікавіше в засобах візуалізації відладчика Visual Studio 2005, так це те, що їх структура вбудовується. Тобто ми можемо створити свій власний засіб візуалізації та вбудувати його у Visual Studio! У цій статті ми розглянемо основи засобів візуалізації відладчика, досліджуємо деякі вбудовані засоби, розглянемо пару безкоштовних, а також вивчимо спосіб створення власного кошту візуалізації відладчика! Читайте далі, щоб дізнатися більше про це!
Основи засобів візуалізації
Щоб використовувати засоби візуалізації відладчика, створіть проект у Visual Studio 2005, який має кілька рядкових змінних. Однією привласніть певний валідний XML-код; інший надайте HTML-вміст; третьої – довге рядкове значення. Далі встановіть точку зупинки в коді і почніть налагодження. У вікні Watch на посиланні до трьох змінних, що містять XML, HTML і довге рядкове значення, ви побачите іконку збільшувального скла праворуч від значення кожної змінної, як це показано нижче.

Натискання на іконку збільшувального скла відобразить обраний засіб візуалізації,а також ви можете вибрати бажаний засіб шляхом натискання на стрілочку поруч із іконкою. У вступній частині цієї статті я показав вам результат, відображений засобом візуалізації для XML; знизу ви побачите приклади, що демонструють засоби візуалізації для тексту (Text) та розмітки HTML.
![]() | ![]() |
Аналізуємо функціональність засобів візуалізації відладчика
Загалом, засоби візуалізації відладчика повинні виконувати 2 завдання: по-перше, при отриманні екземпляра об'єкта певного типу вони повинні створити інтерфейс користувача, що відображає докладний опис об'єкта; по-друге, вони повинні містити необхідний зв'язок для взаємодії з відладчиком Visual Studio. Складністю створення засобу візуалізації є те, що він працює у 2 різних процесах: у межах відладчика Visual Studio, а також у запущеній програмі. Засоби реалізовано у вигляді складання, що містить мета-дані, що вказують певний тип даних, з якими має працювати засіб візуалізації. Коли розробник починає налагоджувати Visual Studio, середовище завантажує всі засоби візуалізації і визначає, з якими типами даних вони можуть працювати. Далі, коли розробник наводить покажчик на змінну у вікні з кодом або вікнах Locals, Autos, і Watch, Visual Studio відображає іконку збільшувального скла.
Натискання на іконку змушує засіб візуалізації завантажити цю інформацію з програми та передати її тій програмі, яка розташована в межах відладчика і яка відображатиме інформацію на екрані. Дана передача інформації з однієї частини засобу до іншої відбувається з використанням бінарної серіалізації за допомогою потоків; остаточним результатом буде те, що будь-які об'єкти, передані між данимичастинами засобу візуалізації повинні бути проіндексовані. Як тільки засобу візуалізації, що працює у відладчику, передається об'єкт для відображення, він відповідальний за створення інтерфейсу користувача для виведення значення об'єкта. Це найчастіше передбачає створення форми (Windows Form) і завантаження значень в елементи управління, виходячи з отриманої інформації об'єкта.
Розширюємо можливості Studio 2005 за допомогою спеціалізованих засобів візуалізації
Вам варто дослідити деякі безкоштовні засоби візуалізації (багато з них також мають доступний вихідний код):
Створюємо спеціалізований засіб візуалізації
Створення спеціалізованого засобу візуалізації зазвичай передбачає створення трьох пов'язаних об'єктів:
- клас засобу візуалізації ("visualizer") - коли розробник натискає на іконку збільшувального скла під час сесії налагодження, ми маємо якимось чином зв'язати відповідний об'єкт та відобразити інформацію у бажаному форматі. Дія отримання інформації об'єкта з відладчика і передачі її в інтерфейс користувача є відповідальністю класу засобу візуалізації. Цей клас успадковується від класу DialogDebuggerVisualizer і надає метод Show() , який відповідає за отримання інформації та виклик інтерфейсу користувача. Цей клас також повинен містити атрибут складання, що означає, що засіб візуалізації є відповідного типу даних.
- Клас джерела ("source") - відповідальністю класу джерела є взяття об'єкта, чия іконка збільшувального скла була натиснута, і передача даної інформації об'єкта налагодження. Даний клас успадковується від VisualizerObjectSource і має метод GetData(object, Stream), який надаєсеріалізовану версію об'єкта класу засобу візуалізації. Зокрема, першим вхідним параметром методу GetData() є об'єкт, чия іконка збільшувального скла була натиснута; Другим вхідним параметром є Stream (потік), до якого об'єкт повинен бути серіалізований.
- інтерфейс ("user interface") - інтерфейс користувача, який відобразить інформацію. Зазвичай це передбачає створення форми (або декількох), додавання відповідних елементів інтерфейсу користувача (TextBoxe, TreeView, і т.д.), а також передачу класом засобу візуалізації інформації для відображення.
| public override void GetData(object target, System.IO.Stream outgoingData) if (target != null &&tar target is Page) Page p = (Page)target; |
// Поміщаємо вміст із Request.ServerVariables в // локальне NameValueCollection b/c Request.ServerVariables // не є серіалізованим. NameValueCollection nvc = новий NameValueCollection(); foreach (string key in p.Request.ServerVariables) nvc.Add(key, p.Request.ServerVariables[key]);
// серіалізація nvc в потік outgoingData BinaryFormatter formatter = New BinaryFormatter(); formatter.Serialize(outgoingData, nvc); > >
Далі, у методі Show() класу засобу візуалізації ми десеріалізуємо інформацію з методу GetData() і створюємо інтерфейс користувача. Це виконується за допомогою цього коду:
| protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) // Десеріалізація Stream повернутого GetData() в NameValueCollection NameValueCollection vars = null; using (Stream dataStream = objectProvider.GetData()) BinaryFormatter formatter = новий BinaryFormatter(); vars = formatter.Deserialize(dataStream) as NameValueCollection; > |
// Створюємо форму інтерфейсу користувача, передаючи в NameValueCollection using (VisualizerForm displayForm = new VisualizerForm()) displayForm.Visualize(vars); windowService.ShowDialog(displayForm); > >
Клас VisualizerForm є Windows Form, що містить елемент керування ListView. Метод Visualize(NameValueCollection) класу VisualizerForm (написаний мною), бере переданий об'єкт NameValueCollection і скидає його вміст у ListView.
Також до класу засобу візуалізації включений атрибут DebuggerVisualizer, який пов'язує засіб із типом даних System.Web.UI.Page:
| [assembly: DebuggerVisualizer( typeof(skmVisualizers.ServerVariables.Visualizer), typeof(skmVisualizers.ServerVariables.ServerVariablesControlSource), Target = typeof(System.Web.UI.Page), Description = "Visualize page's server variables.")] |
Застосовуємо та тестуємо спеціалізований засіб візуалізації
Як тільки ви успішно створили свій спеціалізований засіб візуалізації, його можна легко використовувати. Просто скопіюйте збірку (файл DLL) в My Documents Visual Studio 2005 Visualizers folder. І це все! Для використання візуалізатора відкрийте Visual Studio 2005, потім створіть новий проект веб-сайту та встановіть точку зупинки в коді.Далі запустіть відладчик. Коли ви досягнете точки зупинки, введіть Page у вікно Watch (або це в C# або Me в VB). Ви повинні побачити маленьку іконку збільшувального скла у вікні Watch. Натисніть на неї - і ви повинні побачити таке саме діалогове вікно, як показано нижче. Якщо ви виберете певний пункт із ListView, вам нададуть більш детальну інформацію.


Однією з головних болів при створенні засобів візуалізації налагоджувача є їх тестування. Єдиним способом точно дізнатися те, що у вас повністю відладчик, що коректно працює - це створити збірку вашого засобу, вручну скопіювати його в каталог Visual Studio 2005 Visualizers, запустити VS і почати налагодження. Якщо ви знайдете помилку та захочете виконати будь-які зміни, вам необхідно буде зупинити налагодження, закрити Visual Studio, зробити зміни в засобі візуалізації, повторно скомпілювати та скопіювати файл у каталог Visualizers directory, перезапустити VS та повернутися до налагодження.
Є інший, більш продуктивний спосіб, що дозволяє вам перейти до коду засобу візуалізації за допомогою відладчика. Ця техніка передбачає створення автономної програми (Console Application). Єдиним недоліком є те, що, оскільки ви насправді не запустили програму, вам доведеться імітувати серіалізований об'єкт з вихідного класу, що означає, що вам буде недоступна інформація про конкретні запити, яку ви отримали б при реальному налагодженні. (Це є великою проблемою при роботі з дійсними елементами керування ASP.NET, такими як клас Page.)

