一起谈.NET技术,Visual Studio自定义调试窗体两个小技巧

简介:   本文翻译:Few Tips on Customizing Debugging Window View in Visual Studio 。  使用DebuggerBrowsable特性可以自定义调试窗体。

  本文翻译: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。开始之前,看下面这段代码:

 
 
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 { get ; set ; }
public string Name { get ; set ; }
public int Marks { get ; set ; }
public Address Addresses { get ; set ; }
}

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

public string Address1 { get ; set ; }

public string Address2 { get ; set ; }
}

}

  下面,先看一下不使用这些特性是什么样的效果。我在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两个特性来自定义调试窗体的显示。当你调试一个非常复杂的对象时,这个是非常有用的,它可以使你的调试窗体非常简单。

目录
相关文章
|
6月前
|
开发框架 JSON .NET
ASP.NET Core 自定义配置警告信息
自定义配置警告信息需要在 startup 类中的 ConfigureService 方法中进行配置示例: // 注册 控制器服务 services.AddControllers(configure: setup => { setup.ReturnHttpNotAcceptable = true; ...
43 0
|
7月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
96 0
|
7月前
|
安全 C# 开发工具
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
模拟.NET实际应用场景,综合应用三个主要知识点:一是使用dnSpy反编译第三库及调试,二是使用Lib.Harmony库实现第三库拦截、伪造,三是实现同一个库支持多版本同时引用。
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
|
4月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
65 0
|
4月前
|
开发框架 .NET PHP
Web Deploy配置并使用Visual Studio进行.NET Web项目发布部署
Web Deploy配置并使用Visual Studio进行.NET Web项目发布部署
|
4月前
|
XML API 数据库
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
51 0
|
5月前
|
Windows
基于.Net Core实现自定义皮肤WidForm窗口
基于.Net Core实现自定义皮肤WidForm窗口
49 0
|
5月前
|
数据采集 开发框架 JavaScript
基于.NET Core内置浏览器窗体应用程序界面框架
基于.NET Core内置浏览器窗体应用程序界面框架
47 0
|
7月前
|
算法 编译器 API