Визуализация списков в отладчике Visual Studio или новое слово от «BugAid For Visual Studio»

от автора

Когда приходится просматривать элементы списка (массива) в отладчике Visual Studio, например, в окне QuickWatch часто сталкивашься с не удобством просмотра сложного (или длинного) списка данных. Тяжело увидеть, например, значения поля всех элементов списка.
Данный пост показывает несколько «встроенных» способов решения этой проблемы и возможности расширения BugAid.
мало букв, но достаточно картинок.

Рассмотрим простейший пример.

<source lang="cs"> public class DataItem { public string Name { get; private set; } public string Description { get; private set; } public DataItem(string name, string description) { Name = name; Description = description; } } public class DataItems { public List<DataItem> Items { get; private set; } public DataItems() { Items = new List<DataItem>(); } } </source>

Теперь, просматривая данные в отладчике мы видим примерно так:

Стандартный QuickWatch не позволяет нам увидеть определенное поле (или отформатированные поля) сразу для всех элементов списка.

Для решения этой задачи многим разработчикам известен прямолинейный способ реализиции метода ToString():

<source lang="cs"> public class DataItem { public string Name { get; private set; } public string Description { get; private set; } public DataItem(string name, string description) { Name = name; Description = description; } public override string ToString() { return String.Format("{0}: {1}", Name, Description); } } </source>

или более «атрибутный» способ:
<source lang="cs"> [DebuggerDisplay("Name = {Name}, Desciption = {Description}")] public class DataItem { public string Name { get; private set; } public string Description { get; private set; } public DataItem(string name, string description) { Name = name; Description = description; } } </source>

надо заметить, что для более сложных задач существует аттрибут DebuggerTypeProxy, но и он не предел :).

Эти два способа хороши, но есть у них тот недостаток, что все это должно быть написано в коде программы и откомпилировано. А ведь часто нужно рассматривать данные списка в разных форматах. Останавливать для этого отладчик, менять код или аттрибут, перекомпилировать и запускать заново — это очень трудоемкий способ.

Как оказалось, существует расширение BugAid для Visual Studio (как минимум c VS2010), которое решает эту задачу, а заодно и еще некоторые другие.

После установки этого расширения, появляется меню BugAid с пару опциями и собственным окном «BugAid — QuickWatch».
Теперь можно с помощью звездочки выбрать поля, которые необходимо смотреть для всех элементов списка

и вуаля

но это еще не все. даже скорее, все этим только начинается.
а ведь хочется замутить какой-нибудь формат для данных и показывать что-нибудь этакое. В этом случае можно воспользоваться "Add Custom Expression", добавить выражение для элемента списка: что то типа "[obj].Name.Length"

и «наслаждаться» кастомным форматом данных без компиляции и «контрибуции»:

а как часто хотелось бы гуглом поискать какие-нибудь данные в сложном списке?
так вот вбиваеам в поле Search то что хочется найти и получаем:



а вот сравнить бы пару элементов списка между собой.
можно и это: выбирается первый элемент через меню "Select Left Side For Compare", а затем второй — "Compare to …" и смотрим разницу:

ну тогда бы еще хорошо бы и пофильтровать данные:


кроме этого, можно сохранять элементы и сравнивать элементы во времени.

Расширение BugAid имеет еще несколько интересных возможностей (например, для визуализации сложных выражений в операторе if).

так что я думаю, это расширение заслуживает внимание разработчиков.

пару слов о недостатках, которые я обнаружил.

  • Это еще не релиз, а бета, так что не всегда работает стабильно. Чем сложнее структуры данных, там увеличивается вероятность всяких проблем.
  • Некоторый стандартный функционал (например аттрибут DebuggerTypeProxy) не поддержан расширением.
  • Расширение не бесплатно, но есть двухмесячный бесплатный период использования.

Кстати, сайт поддержки http://bugaidsoftware.userecho.com/ довольно удобен и уважает gamification, что в данном случае скорее хорошо, чем нет.

спасибо,
Игорь.

ссылка на оригинал статьи http://habrahabr.ru/post/181604/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *