[英]C# debugging: [DebuggerDisplay] or ToString()?
有两种方法可以增加调试信息的有用性,而不是在调试器中看到{MyNamespace.MyProject.MyClass}
。
这些是DebuggerDisplayAttribute
和ToString()
方法的使用。
using System.Diagnostics;
...
[DebuggerDisplay("Name = {Name}")]
public class Person
{
public string Name;
}
或者
public class Person
{
public string Name;
public override string ToString()
{
return string.Format("Name = {0}", Name);
}
}
有什么理由更喜欢一个吗? 有什么理由不做两者? 纯粹是个人喜好吗?
使用[DebuggerDisplay]
仅适用于调试器。 覆盖 ToString() 具有在运行时更改显示的“副作用”。
这可能是也可能不是一件好事。
通常,在调试期间您需要比标准ToString()
输出更多的信息,在这种情况下,您会同时使用两者。
例如,在您的情况下,“ToString”实现对我来说似乎很奇怪。 我希望“Person”类 ToString() 实现直接返回 Name,而不是“Name = PersonsName”。 但是,在调试期间,我可能需要额外的信息。
“当您创建自定义类或结构时,您应该覆盖 ToString 方法,以便向客户端代码提供有关您的类型的信息。” — MSDN
如果ToString()
返回并且您在调试器中看到的不是您想要的,那么您可以使用DebuggerDisplayAttribute
。
还可以考虑调试器的缓慢:
DebuggerDisplayAttribute
格式表达式在每个调试步骤/断点后由调试器解释。
ToString
在您的代码中编译,因此调试器执行起来要快得多。
这与条件断点相同:如果条件表达式在每次执行到达断点时都被调试器解释太慢,那么删除断点并添加如下临时代码会很有用: if (condition) Debugger.Break();
DebuggerDisplay
功能非常有限。 您只有一个格式字符串,可用于显示某些成员的值。
如果您想有条件地显示数据、来自多个级别的数据或聚合数据, ToString()
可能是您唯一的选择。
如果您使用 Xamarin 为 Android 开发,ToString 方法将不会显示在监视窗口中,但 DebuggerDisplay 会显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.