前言

对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容。

注:监视窗口在调试时可以一次显示多个变量。“快速监视”对话框一次显示一个变量。

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轻松定制调试的更多相关文章

  1. 【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎

    [Open Search产品评测]--   来往,7天轻松定制属于自己的搜索引擎   [使用背景] 相信很多人都遇到过要给网站或者app做一个搜索功能的需求,很久之前自己折腾过lucene,搞了很久, ...

  2. VS中附加进程的方式调试IIS页面,以及设置断点无效问题解决

    以前调试网站的时候都习惯是直接在解决方案中右键调试——启动新实例,后来发现这样的缺点有: 1.启动比较慢: 2.一些浏览器的request参数无法带入: 3.不特殊指定启动url的话,VS会将页面加载 ...

  3. 脚本编程中的test、bash调试、变量计算、参数

    脚本编程中的test.bash调试.变量计算.参数 1.文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试路径是否为目录 -r FILE:测试当前 ...

  4. 【转载】在Linux中使用VS Code编译调试C++项目

    原文:在Linux中使用VS Code编译调试C++项目 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS ...

  5. 在Visual Studio中使用Pseudovariables来帮助调试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在Visual Studio中使用Pseudovariables来帮助调试.

  6. Eclipse中Maven WEB工程tomcat调试

    最近没事了玩一下maven,使用maven管理工程中的依赖包非常的方便.建立maven web工程的时候开始不知道怎么用tomcat来调试,总是使用mave的tomcat插件发布了后来调试,觉得非常的 ...

  7. webSphere-Eclipse中配置was的远程调试

    目前我们项目中使用的应用服务器多是WebSphere,一直苦于无法进行调试,今天在网上看到一篇,原文是 http://www.cnblogs.com/newstar/archive/2010/04/1 ...

  8. 在 UWP 应用中创建、使用、调试 App Service (应用服务)

    在 Windows 10 中微软为 UWP 引入了 App Service (即应用服务)这一新特性用以提供应用间交互功能.提供 App Service 的应用能够接收来自其它应用传入的参数进行处理后 ...

  9. 在gentoo中打开tomcat的远程调试开关

    在一般象gentoo等发行版中,系统安装tomcat这类软件后会产生一些启动脚本, 比如是/etc/init.d/tomcat-7, 启动方式与原始的tomcat不太一样.在gentoo中,假设须要远 ...

随机推荐

  1. SpringBoot WebSocket技术

    最近看了Spring in Action,了解了一下WebSocket和Stomp协议相关技术,并搭建了一个项目.网上的例子不完整或者描述不清,所以自己记录一下以作备忘. 一.配置 Spring Bo ...

  2. 1 分钟上手,在容器中运行 Visual Studio Code

    https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers 这个插件允许我们在容器中运 ...

  3. php 换行符

    PHP 中换行可以用 PHP_EOL 来替代,以提高代码的源代码级可移植性: unix系列用 \n windows系列用 \r\n mac用 \r 总结:在一些大文本域中换行的文本可以用这个来进行切割 ...

  4. jQuery库 之 jquery slimscroll插件使用

    1.引入jQuery插件 <script type="text/javascript" src="jquery.min.js"></scrip ...

  5. 2V升3V芯片,输入2V输出3V可达1A

    PW5328B是一个恒定频率, 6引脚 SOT23电流模式升压转换器,用于小型低功耗应用. PW5328B的开关频率为 1.2MHz,允许使用微小的.低成本的电容器和电感器.内部软启动导致小涌流和延长 ...

  6. Java中的深浅拷贝问题,你清楚吗?

    一.前言 拷贝这个词想必大家都很熟悉,在工作中经常需要拷贝一份文件作为副本.拷贝的好处也很明显,相较于新建来说,可以节省很大的工作量.在Java中,同样存在拷贝这个概念,拷贝的意义也是可以节省创建对象 ...

  7. Django的数据库读写分离

    Django的数据库读写分离 1.首先是配置数据库 在settings.py文件中增加多个数据库的配置: DATABASES = { 'default': { 'ENGINE': 'django.db ...

  8. django form和form组件

    form介绍: 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是 ...

  9. JSAAS BPM快速开发平台-企业管理软件,专属你的企业管家

    前言: 2020年,企业该如何去选择合适的信息化规划管理软件,基于目前社会软件杂乱无章,选择企业业务贴近的管理软件,甚是困难,市场上一些大品牌公司的产品,定位高,价格高,扩展难,等等一系列的问题,对于 ...

  10. session和cookie自动登录机制

    cookie的存储 cookie是浏览器支持的一种本地存储方式.以dict,键值对方式存储. {"sessionkey": "123"} 浏览器会自动对于它进行 ...