我想应用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条答案
按热度按时间p8h8hvxi1#
是的,你可以像平常一样使用属性的任何方法。
[DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")]
就是一个例子http://msdn.microsoft.com/en-us/library/x810d419.aspx
dfddblmv2#
https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/推荐了一个技巧
基本上,创建一个私有属性,比如
DebugDisplay
。让属性返回您选择的格式化字符串。然后使用DebuggerDisplay
属性中的新私有属性。例如:
我发现这种方式可读性更强。
l5tcr1uw3#
如果您只想以十六进制格式查看值,则Visual Studio中有一个选项可以以该格式显示值。调试时,将鼠标悬停在变量上以显示调试显示,或者在监视或局部变量窗口中查找变量。右键单击变量并选择“十六进制显示”选项。然后调试器将以十六进制格式显示所有数值。在这种情况下,您将得到:“Foo:地址值为0x0000abcd”
不幸的是,我看不到任何方法来真正控制DebuggerDisplay属性显示的字符串的格式。
6tqwzwtp4#
Microsoft自己的文档:
https://learn.microsoft.com/en-us/visualstudio/debugger/format-specifiers-in-csharp?view=vs-2017
通过将
,h
添加到表达式的计算中,可以以十六进制格式显示值。这对于
DebuggerDisplay
属性也非常有效。