Visual Studio自定義除錯窗體兩個小技巧

weixin_34391854發表於2010-09-01
    這篇文章講述如何自定義你的除錯窗體。這些技巧在你除錯應用程式的時候是非常有用的。當你除錯的時候,你可能希望簡化除錯窗體的資訊,或者在除錯窗體上除去對你不重要的不必要的資訊,這篇文章將會幫助到你。本文翻譯:Few Tips on Customizing Debugging Window View in Visual Studio

    使用DebuggerBrowsable特性可以自定義除錯窗體。

使用DebuggerDisplay特性可以自定義除錯資訊的顯示。

  要使用這些特性,需要引用System.Diagnostics名稱空間。

   技巧1、使用DebuggerBrowsable特性

    你可以通過在屬性上使用DebuggerBrowsable特性來自定義除錯窗體。這些特性可以用任何屬性、欄位和索引上。DebuggerBrowsable的建構函式需要一個DebuggerBrowsableState 引數。DebuggerBrowsableState用來指定除錯資訊在窗體上顯示的方式。

    它有三個狀態:

        1、Collapsed :如果設定DebuggerBrowsableState為Collapsed 。那麼除錯資訊摺疊顯示。預設為Collapsed

        2、Never :除錯窗體不顯示除錯資訊  

        3、RootHidden :隱藏除錯資訊的根元素,只顯示子元素資訊,想了解更多,看MSDN

    下面我將通過一個例子敘述如何使用DebuggerBrowsable 和DebuggerBrowsableState。開始之前,看下面這段程式碼:

 

ExpandedBlockStart.gif程式碼
class Program
{
    
static void Main(string[] args)
    {
        List
<Student> student = new List<Student>();
        student.Add(
new Student { Roll = 1, Name = "Abhijit", Marks = 87, Addresses = new Address { Address1 = "add1", Address2 = "add2" } });
        student.Add(
new Student { Roll = 2, Name = "Abhishek", Marks = 41, Addresses = new Address { Address1 = "add3", Address2 = "add4" } });
        student.Add(
new Student { Roll = 3, Name = "Rahul", Marks = 67, Addresses = new Address { Address1 = "add5", Address2 = "" } });
        student.Add(
new Student { Roll = 4, Name = "Sunil", Marks = 91, Addresses = new Address { Address1 = "add11", Address2 = "add122" } });
        student.Add(
new Student { Roll = 5, Name = "Atul", Marks = 71, Addresses = new Address { Address1 = "add12", Address2 = "add222" } });
        student.Add(
new Student { Roll = 6, Name = "Kunal", Marks = 71, Addresses = new Address { Address1 = "add12", Address2 = "add222" } });
    }
    
/// <summary>
    
/// Student Class
    
/// </summary>

    
class Student
    {
        
public int Roll { getset; }
        
public string Name { getset; }
        
public int Marks { getset; }
        
public Address Addresses { getset; }
    }

    
/// <summary>
    
/// Address of Students
    
/// </summary>
    class Address
    {

        
public string Address1 { getset; }

        
public string Address2 { getset; }
    }

}

 

 

 

下面,先看一下不使用這些特性是什麼樣的效果。我在main 函式的結尾放置一個斷點。你可以得到下面的除錯窗體。

 

從上圖中可以看到有6個student物件,每個物件的值都不同。Addresses是類Address的物件,它的除錯資訊值是隱藏的。

 現在,我想要看到address的所有屬性資訊,隱藏Marks 屬性。為了實現這樣的需求,需要為給student 類中的Marks 和Addresses屬性新增DebuggerBrowsable特性。如下圖:

 

 

 

 技巧2、使用DebuggerDisplay特性

    使用DebuggerDisplay可以定義類和欄位在除錯窗體中如何顯示。使用 DebuggerDisplay可以改變除錯窗體中顯示的資訊和變數,使它顯示你想要的資訊。

看下面沒有使用DebuggerDisplay 的除錯窗體。

預設情況下,每一個study物件你只得到NameSpace.ClassName這樣的顯示資訊。我們可以使用DebuggerDisplay來自定義顯示的資訊。 DebuggerDisplay  建構函式需要顯示名作為引數。你可以傳遞指定引數來顯示。做如下設定:

看下效果:

 

使用DebuggerDisplay的時候必須注意,在{}中必須給出類的正確屬性,否者你會得到下面資訊。

    將Roll寫成Rolls,如下圖:

提示:The name 'Rolls' does not exist in the current context。如下圖:

 

總結:本文講述了使用DebuggerBrowsable 和DebuggerDisplay兩個特性來自定義除錯窗體的顯示。當你除錯一個非常複雜的物件時,這個是非常有用的,它可以使你的除錯窗體非常簡單。

作者:朱祁林
出處:http://zhuqil.cnblogs.com
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。

 

 

相關文章