[英]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.