.NET中使用DebuggerDisplay轻松定制调试
前言
对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容。
注:监视窗口在调试时可以一次显示多个变量。“快速监视”对话框一次显示一个变量。

DebuggerDisplayAttribute
在下面示例中,我们在类上添加DebuggerDisplay,添加字符串:("Name={Name},Age={Age}"):
class Program
{
static void Main(string[] args)
{
Student student = new Student()
{
Name = "Mr.A",
Age = 18
};
Console.WriteLine("Hello World!");
}
[DebuggerDisplay("Name={Name},Age={Age}")]
class Student
{
public int Age { get; set; }
public string Name { get; set; }
}
}
如下图,在调试模式下,我们可以将鼠标箭头放到变量上去,从而看到变量的值,也可以看到我们定义好的字符串内容格式:

进一步来看一下,我们定义一个属性,将属性的内容呈现出来,代码片段如下所示:
[DebuggerDisplay("{DebuggerDisplay,nq}")]
public struct Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y)
{
X = x;
Y = y;
}
private string DebuggerDisplay => $"{X},{Y}";
}
对于结果已经呈现出来了,我们可以看到我们在DebuggerDisplay属性中定义的内容,同时我们看的是没有引号,是的,这一点很重要,对于nq的话他主要删除引号,因为我们在这里采用的是字符串,所以可通过nq进行引号的删除

DebuggerBrowsableAttribute
对于DebuggerBrowsableAttribute特性来说的话,他应用于属性字段,可控制它们的显示方式,通过枚举类型DebuggerBrowsableState来控制字段属性的显示行为:
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public static string y = "Test String";
DebuggerBrowsableState
- Never 可隐藏字段属性
- Collapsed 默认选项,显示成员信息
- RootHidden 不显示字段,如果是数组或者集合将以成对的对象形式显示
DebuggerTypeProxyAttribute
DebuggerTypeProxyAttribute属性用于指定代理类型显示,它允许我们为类型定制视图,如果找到这个属性,则表达式评估其将显示代理类型替换为该属性所应用的类型,这其实对我们来公开原始类型以外的属性很有用。下面我们看一下代码示例:
[DebuggerTypeProxy(typeof(SampleDebugView))]
public class Sample
{
public string Name { get; set; }
private class SampleDebugView
{
private readonly Sample _sample;
public SampleDebugView(Sample sample)
{
_sample = sample;
}
public string Name => _sample.Name;
public int NameLength => _sample.Name.Length;
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public char[] NameCharacters => _sample.Name.ToCharArray();
}
}
可以看到下图,我们通过代理视图的方式将我们的信息都展开,这样更方便我们对信息的调试显示

Reference
https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.debuggerbrowsableattribute
.NET中使用DebuggerDisplay轻松定制调试的更多相关文章
- 【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
[Open Search产品评测]-- 来往,7天轻松定制属于自己的搜索引擎 [使用背景] 相信很多人都遇到过要给网站或者app做一个搜索功能的需求,很久之前自己折腾过lucene,搞了很久, ...
- VS中附加进程的方式调试IIS页面,以及设置断点无效问题解决
以前调试网站的时候都习惯是直接在解决方案中右键调试——启动新实例,后来发现这样的缺点有: 1.启动比较慢: 2.一些浏览器的request参数无法带入: 3.不特殊指定启动url的话,VS会将页面加载 ...
- 脚本编程中的test、bash调试、变量计算、参数
脚本编程中的test.bash调试.变量计算.参数 1.文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试路径是否为目录 -r FILE:测试当前 ...
- 【转载】在Linux中使用VS Code编译调试C++项目
原文:在Linux中使用VS Code编译调试C++项目 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS ...
- 在Visual Studio中使用Pseudovariables来帮助调试
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在Visual Studio中使用Pseudovariables来帮助调试.
- Eclipse中Maven WEB工程tomcat调试
最近没事了玩一下maven,使用maven管理工程中的依赖包非常的方便.建立maven web工程的时候开始不知道怎么用tomcat来调试,总是使用mave的tomcat插件发布了后来调试,觉得非常的 ...
- webSphere-Eclipse中配置was的远程调试
目前我们项目中使用的应用服务器多是WebSphere,一直苦于无法进行调试,今天在网上看到一篇,原文是 http://www.cnblogs.com/newstar/archive/2010/04/1 ...
- 在 UWP 应用中创建、使用、调试 App Service (应用服务)
在 Windows 10 中微软为 UWP 引入了 App Service (即应用服务)这一新特性用以提供应用间交互功能.提供 App Service 的应用能够接收来自其它应用传入的参数进行处理后 ...
- 在gentoo中打开tomcat的远程调试开关
在一般象gentoo等发行版中,系统安装tomcat这类软件后会产生一些启动脚本, 比如是/etc/init.d/tomcat-7, 启动方式与原始的tomcat不太一样.在gentoo中,假设须要远 ...
随机推荐
- 创建并使用https证书
目录 前言 产生证书 测试https服务器 用tls加密tcp连接 总结 前言 https要比http更安全些,因此可以配置Nginx服务器使用证书,客户端就会去第三方平台校验证书. 但是我们自己的服 ...
- php 换行符
PHP 中换行可以用 PHP_EOL 来替代,以提高代码的源代码级可移植性: unix系列用 \n windows系列用 \r\n mac用 \r 总结:在一些大文本域中换行的文本可以用这个来进行切割 ...
- jQuery库 之 jquery slimscroll插件使用
1.引入jQuery插件 <script type="text/javascript" src="jquery.min.js"></scrip ...
- git 基本命令和操作
设置全局用户名+密码 $ git config --global user.name 'runoob' $ git config --global user.email test@runoob.com ...
- Java优先队列PriorityQueue的各种打开方式以及一些你不知道的细节
目录 Java优先队列PriorityQueue的各种打开方式以及一些你不知道的细节 优先队列的默认用法-从小到大排序 对String类用优先队列从大到小排序 通过自定义比较器对自定义的类进行从小到大 ...
- Elasticsearch从入门到放弃:浅谈算分
今天来聊一个 Elasticsearch 的另一个关键概念--相关性算分.在查询 API 的结果中,我们经常会看到 _score 这个字段,它就是用来表示相关性算分的字段,而相关性就是描述一个文档和查 ...
- click的简单使用
click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...
- 虚拟化kvm的搭建
虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...
- 当中台遇上DDD,我们该如何设计微服务? - InfoQ https://www.infoq.cn/article/7QgXyp4Jh3-5Pk6LydWw
当中台遇上DDD,我们该如何设计微服务? - InfoQ https://www.infoq.cn/article/7QgXyp4Jh3-5Pk6LydWw
- Geotools操作GeoJSON:解析FeatureCollection对象文件
Geotools操作GeoJSON:解析FeatureCollection对象文件 一.解析FeatureCollection对象文件 1.1 geotools操作GeoJSON过程中的问题及相关源码 ...