Можно ли изменить то, что отображается в столбце «Значение» окна «Переменные отладчика Visual Studio» для стороннего класса? - PullRequest
1 голос
/ 05 октября 2011

При отладке существуют различные Переменные окна (авто, местные, часы), содержащие столбцы Имя, Значение, Тип.Часто кажется, что значение показывает имя класса объекта.В конкретных случаях я хотел бы показать что-то более осмысленное на основе свойств экземпляра класса.

В качестве конкретного примера, для CodeTypeReference я хотел бы увидеть текстовое представлениессылочный тип (где допустимо) на основе BaseType строки или ArrayElementType вместо отображения «System.CodeDom.CodeTypeReferenceExpression».

Кажется, визуализаторы предлагают отдельный диалогокна, а не способ заполнения столбца значений.

Подсказки данных относятся к переменной, а не к типу.

Кажется, что наиболее близким является DebuggerTypeProxyAttribute , в которомНа мой взгляд, я спрашиваю: «Можно ли применить атрибут к чужому классу?»

В основном я имею дело с Visual Studio 2010, хотя ответ Visual Studio 2008 был бы полезен.

Ответы [ 3 ]

7 голосов
/ 05 октября 2011

Да, есть два способа сделать это:

  1. Используя OzCode (ранее BugAid для Visual Studio), коммерческий инструмент, который я создал, вы можете просто пометить свойства / поля для вашего типа и получить те появляются в столбце Значение для любого типа, независимо от того, является ли он третьим лицом или нет.

  2. Вы можете изменить свой файл autoexp.cs и применить DebuggerDisplayAttribute или DebuggerTypeProxyAttribute к сторонним типам, как описано в мой ответ на аналогичный вопрос . Например, вот как вы должны применить атрибут DebuggerDisplayAttribute к System.Drawing.Pen: [assembly: DebuggerDisplay(@"\{Color = {color}}", Target = typeof(Pen))]

Этот ответ относится как к VS2008, так и к VS2010.

1 голос
/ 05 октября 2011

Вы можете переопределить метод ToString для своих собственных классов. Значение обычно является просто вызовом ToString, и если не переопределено, это показывает тип.

Обновление: Для классов, для которых у вас нет кода, я не могу дать ценный ответ, а вы не могли бы обернуть классы (наследовать от), но это hm Странно быть вежливым (ИМХО).

0 голосов
/ 30 июня 2018

Да, вы можете применить DebuggerTypeProxyAttribute к типам, которые вам не принадлежат (если они не являются частными), как объяснено в моем ответе на аналогичный вопрос здесь

...