.net 可以在DebuggerDisplay显示的文本中使用字符串格式吗?

s4n0splo  于 2023-05-19  发布在  .NET
关注(0)|答案(4)|浏览(142)

我想应用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是否也可以这样做。

p8h8hvxi

p8h8hvxi1#

是的,你可以像平常一样使用属性的任何方法。[DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")]就是一个例子
http://msdn.microsoft.com/en-us/library/x810d419.aspx

dfddblmv

dfddblmv2#

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); }
    }
}

我发现这种方式可读性更强。

l5tcr1uw

l5tcr1uw3#

如果您只想以十六进制格式查看值,则Visual Studio中有一个选项可以以该格式显示值。调试时,将鼠标悬停在变量上以显示调试显示,或者在监视或局部变量窗口中查找变量。右键单击变量并选择“十六进制显示”选项。然后调试器将以十六进制格式显示所有数值。在这种情况下,您将得到:“Foo:地址值为0x0000abcd”
不幸的是,我看不到任何方法来真正控制DebuggerDisplay属性显示的字符串的格式。

6tqwzwtp

6tqwzwtp4#

Microsoft自己的文档:
https://learn.microsoft.com/en-us/visualstudio/debugger/format-specifiers-in-csharp?view=vs-2017
通过将,h添加到表达式的计算中,可以以十六进制格式显示值。
这对于DebuggerDisplay属性也非常有效。

相关问题