Может ли атрибут DebuggerDisplay применяться к типам, которые не принадлежат?
Мне нравится атрибут DebuggerDisplay
. Мне это очень нравится, я хочу использовать его для типов, для которых у меня нет исходного кода.
Это возможно?
- #if DEBUG против условного ("DEBUG")
- Как получить вывод ассемблера из источника C / C ++ в gcc?
- Создание точки останова в Xcode для непризнанного селектора
- Есть что-то вроде «Firebug для IE» (для отладки JavaScript)?
- Какое имя следует отнести к отладке, добавляя выражения «print»
- Как редактировать и отлаживать источники библиотеки R
- Есть ли известная проблема, связанная с символами ядра Windows 7?
- Почему я не могу редактировать метод, содержащий анонимный метод в отладчике?
- Отслеживать все вызовы метода ObjC?
- NoSuchFieldError Java
- Как обнаружить системную информацию типа os или типа устройства
- Отладка java-приложения без запуска JVM с аргументами отладки
- Eclipse - отладчик не останавливается в точке останова
Пример настройки DebuggerDisplay для иностранного типа (System.Collections.Generic.KeyValuePair
using System.Collections.Generic; using System.Diagnostics; [assembly: DebuggerDisplay("[Key={Key}, Value={Value}]", Target = typeof(KeyValuePair<,>))]
(Протестировано в VS2015)
Да. На самом деле, Microsoft была настолько хороша, что сделала это встроенной опцией в Visual Studio.
Посмотрите на «Мои документы \ Visual Studio 20XX \ autoexp.cs» для некоторых примеров применения атрибута DebuggerDisplay к типам, которые являются чужими для вашей сборки. Затем добавьте часть своей, перекомпилируйте ее и замените autoexp.dll и перезапустите Visual Studio. Это должно просто работать.
Для справки см. Желтый абзац «Примечание» в этой статье MSDN
В качестве альтернативы: я являюсь создателем приобретаемого расширения для Visual Studio, что позволяет делать это с гораздо меньшей проблемой, даже не нужно останавливать сеанс отладки.
Атрибуты – это способ украсить что-то (типы, методы, поля и т. Д.) Во время компиляции, и они хранятся в двоичном представлении сборки. Один из способов добавить в него новый атрибут – перекомпилировать код с новым атрибутом. Если у вас нет кода, в некоторых случаях вы можете получить код, декомпилировав сборку.
Другой способ, которым я могу думать, может состоять в том, чтобы использовать Reflection для загрузки и обработки всех типов в сборке, а затем сгенерировать (через reflection) еще одну сборку с добавлением DebuggerDisplay к типам, которые вы хотите (вот пример )