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

в 21:27, , рубрики: .net, BugAid, debugger, Visual Studio, visual studio 2012, visualization, метки: , , , , , ,

Когда приходится просматривать элементы списка (массива) в отладчике 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>

Теперь, просматривая данные в отладчике мы видим примерно так:
Визуализация списков в отладчике Visual Studio или новое слово от «BugAid For Visual Studio»

Стандартный 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>

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

или более «атрибутный» способ:

<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>

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

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

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

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

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

и вуаля

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: constructor

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js