Visual Studio使用DebuggerBrowsable和DebuggerDisplay自定義調試窗體
使用DebuggerBrowsable特性可以自定義調試窗體。
使用DebuggerDisplay特性可以自定義調試信息的顯示。
要使用這些特性,需要引用System.Diagnostics命名空間。
技巧1、使用DebuggerBrowsable特性
你可以通過在屬性上使用DebuggerBrowsable特性來自定義調試窗體。這些特性可以用任何屬性、字段和索引上。 DebuggerBrowsable的構造函數需要一個DebuggerBrowsableState 參數。 DebuggerBrowsableState用來指定調試信息在窗體上顯示的方式。
它有三個狀態:
1、Collapsed :如果設置DebuggerBrowsableState爲Collapsed 。那麼調試信息摺疊顯示。默認爲Collapsed
2、Never :調試窗體不顯示調試信息
3、RootHidden :隱藏調試信息的根元素,只顯示子元素信息,想了解更多,看MSDN。
下面我將通過一個例子敘述如何使用DebuggerBrowsable 和DebuggerBrowsableState。開始之前,看下面這段代碼:
01 class Program 02 { 03 static void Main(string[] args) 04 { 05 List<Student> student = new List<Student>(); 06 student.Add(new Student { Roll = 1, Name = "Abhijit", Marks = 87, Addresses = new Address { Address1 = "add1", Address2 = "add2" } }); 07 student.Add(new Student { Roll = 2, Name = "Abhishek", Marks = 41, Addresses = new Address { Address1 = "add3", Address2 = "add4" } }); 08 student.Add(new Student { Roll = 3, Name = "Rahul", Marks = 67, Addresses = new Address { Address1 = "add5", Address2 = "" } }); 09 student.Add(new Student { Roll = 4, Name = "Sunil", Marks = 91, Addresses = new Address { Address1 = "add11", Address2 = "add122" } }); 10 student.Add(new Student { Roll = 5, Name = "Atul", Marks = 71, Addresses = new Address { Address1 = "add12", Address2 = "add222" } }); 11 student.Add(new Student { Roll = 6, Name = "Kunal", Marks = 71, Addresses = new Address { Address1 = "add12", Address2 = "add222" } }); 12 } 13 /// <summary> 14 /// Student Class 15 /// </summary> 16 17 class Student 18 { 19 public int Roll { get; set; } 20 public string Name { get; set; } 21 public int Marks { get; set; } 22 public Address Addresses { get; set; } 23 } 24 25 /// <summary> 26 /// Address of Students 27 /// </summary> 28 class Address 29 { 30 31 public string Address1 { get; set; } 32 33 public string Address2 { get; set; } 34 } 35 36 }
下面,先看一下不使用這些特性是什麼樣的效果。我在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兩個特性來自定義調試窗體的顯示。當你調試一個非常複雜的對象時,這個是非常有用的,它可以使你的調試窗體非常簡單。