一起谈.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两个特性来自定义调试窗体的显示。当你调试一个非常复杂的对象时,这个是非常有用的,它可以使你的调试窗体非常简单。

目录
相关文章
|
21天前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
20天前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
2天前
不同的方式自定义 Visual Studio 的启动
可以通过几种不同的方式自定义 Visual Studio 的启动体验,例如打开最新的解决方案或仅打开空的开发环境。
|
17天前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
|
20天前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
|
21天前
|
前端开发 JavaScript C#
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
|
21天前
|
设计模式 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
|
2月前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
53 1
|
2月前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
134 12
|
2月前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
37 4