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