Можно ли использовать форматирование строки в тексте, показанном с помощью DebuggerDisplay? - PullRequest
13 голосов
/ 07 декабря 2009

Я хочу применить DebuggerDisplayAttribute для включения значения адреса памяти. Можно ли отобразить его в шестнадцатеричном формате?

[DebuggerDisplay("Foo: Address value is {Address}")] 
class Foo 
{
    System.IntPtr m_Address = new System.IntPtr(43981); // Sample value


    System.IntPtr Address
    {
         get { return m_Address; }
    }
} 

Это отобразит: Foo: Address value is 43981 Вместо этого я бы хотел, чтобы значение отображалось в шестнадцатеричном виде, например: Foo: Address value is 0xABCD.

Я знаю, что могу применить все виды форматирования, переопределив ToString(), но мне интересно, возможно ли то же самое с DebuggerDisplayAttributes.

Заранее спасибо!

Ответы [ 4 ]

23 голосов
/ 07 декабря 2009

Да, вы можете использовать любой метод вне свойств, как обычно. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] является примером

http://msdn.microsoft.com/en-us/library/x810d419.aspx

10 голосов
/ 26 апреля 2016

Есть совет, рекомендованный https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

По сути, создайте личное свойство , скажем, DebugDisplay. Пусть свойство вернет отформатированную строку по вашему выбору. Затем просто используйте вашу новую частную собственность в атрибуте DebuggerDisplay.

Например,

[DebuggerDisplay("{DebugDisplay,nq}")]
public sealed class Student {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    private string DebugDisplay {
        get { return string.Format("Student: {0} {1}", FirstName, LastName); }
    }
}

Я считаю, что этот способ гораздо более читабелен.

2 голосов
/ 07 декабря 2009

Если вы хотите просматривать значения только в шестнадцатеричном формате, в Visual Studio есть опция для отображения значений в этом формате. Во время отладки наведите курсор на переменную, чтобы вызвать экран отладки, или найдите переменную в окне часов или локальных окон. Щелкните правой кнопкой мыши переменную и выберите параметр «Шестнадцатеричное отображение». Затем отладчик отобразит все числовые значения в шестнадцатеричном формате. В этом случае вы получите: «Foo: Адрес имеет значение 0x0000abcd»

К сожалению, я не смог найти способа реально контролировать формат строки, отображаемой атрибутом DebuggerDisplay, как вы и просили.

0 голосов
/ 26 октября 2018

Из собственной документации Microsoft:

https://docs.microsoft.com/en-us/visualstudio/debugger/format-specifiers-in-csharp?view=vs-2017

Вы можете отобразить значение в шестнадцатеричном формате, добавив ,h к оценке выражения.

Это также очень хорошо работает с атрибутом DebuggerDisplay.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...