簡體   English   中英

C# 調試:[DebuggerDisplay] 還是 ToString()?

[英]C# debugging: [DebuggerDisplay] or ToString()?

有兩種方法可以增加調試信息的有用性,而不是在調試器中看到{MyNamespace.MyProject.MyClass}

這些是DebuggerDisplayAttributeToString()方法的使用。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM