Visual Studio: подавление вывода в немедленном окне

#visual-studio #debugging

#visual-studio #отладка

Вопрос:

Во время тестирования моего кода на C # я вручную присваиваю разные значения структурным переменным в немедленном окне Visual Studio 2019, например variable = new MyStruct() .
Это работает хорошо, но после каждого присваивания печатается новое значение. Я назначаю структуру с несколькими полями и множеством общедоступных свойств, поэтому в немедленном окне выводится представление новой структуры в формате toString(), а затем каждое отдельное поле и свойство структуры, что составляет в общей сложности 73 бесполезных строки в немедленном окне.

Как я могу подавить этот вывод?
Я могу обмануть, заключив назначение в фигурные скобки (variable = new MyStruct()).Prop1 и запросив свойство структуры, поэтому я получаю только одну строку, что намного лучше, но это не то, что я ищу. Я не хочу вообще никакого вывода, если это возможно, или, по крайней мере, обычного «выражение было вычислено и не имеет значения»., Потому что это можно легко отфильтровать.

Ответ №1:

Вместо немедленного окна (которое я люблю), как насчет украшения структуры / класса с использованием приведенных DebuggerDisplay выше классов, о которых идет речь, чтобы предоставить вам только текущую статистику в окнах просмотра?

всего 73 бесполезных строки в немедленном окне.

 [DebuggerDisplay("{"   nameof(GetDebuggerDisplay)   "(),nq}")]
public class MyHugePropertyLadenClass 
{ 
   ...
    /// <summary>
    /// During debugging let us know what we are l@@king at. 
    /// </summary>
    /// <returns>The text to show.</returns>
    private string GetDebuggerDisplay()    // Make this public if not shown in immediate
        => $"Viable: {IsViable} Valid: {IsValid} Address: {LocalAddress}";
  

Также не касается немедленного окна, если оно применимо к вам … можно удалить свойства с помощью

 [DebuggerBrowsable(DebuggerBrowsableState.Never)]
  

поскольку это предотвращает появление следующего за ним свойства в окне отладки для класса.

Приведенный выше код, который я показал, выполнен в .Net Core, поэтому некоторые функции могут отличаться. Проверьте класс DebuggerDisplayAttribute

Комментарии:

1. Сначала я подумал, что ваши предложения бесполезны, потому что я не знал, как изменить значение структуры в окнах просмотра. Но затем я протестировал его и обнаружил, что я действительно могу ввести new MyStruct() в столбец значений строки переменной… это здорово! Однако в немедленном окне я могу перемещаться по всем ранее использованным командам с помощью клавиш со стрелками, поэтому мне не нужно повторно вводить длинные назначения. :-/ Ваши предложения полезны, хотя 1! К сожалению, они не отвечают на мой вопрос.

2. Я знал, что это одноразовое предложение, поэтому я рад, что вы извлекли из него какую-то пользу; ausgezeichnet.