.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中,假设须要远 ...
随机推荐
- ctfhub技能树—RCE—过滤cat
打开靶机 查看页面信息 构造payload 127.0.0.1 || ls 题目提示过滤了cat,但我还是想试试 果然不行 网页访问没有结果,应该和上题一样被注释了,使用和同样的方法进行解题 利用命令 ...
- 二进制部署kubernetes
Kubernetes二进制安装 环境准备: 主机环境:做好主机名hosts文件映射 硬件2cpu 2G内存 192.168.30.21 k8s-master 192.168.30.22 k8s-no ...
- Lakehouse: 统一数据仓库和高级分析的新一代开放平台
1. 摘要 数仓架构在未来一段时间内会逐渐消亡,会被一种新的Lakehouse架构取代,该架构主要有如下特性 基于开放的数据格式,如Parquet: 机器学习和数据科学将被作为头等公民支持: 提供卓越 ...
- 计算机网络安全 —— 对称加密算法 DES
一.对称加密算法概念 我们通过计算机网络传输数据时,如果无法防止他人窃听, 可以利用密码学技术将发送的数据变换成对任何不知道如何做逆变换人都不可理解的形式, 从而保证了数据的机密性.这种变换被称为加密 ...
- 导出exe的经验
安装pyinstaller 首先要找到scripts的绝对路径(主要是找到scripts就行了 先是安装C:\Users\96290\AppData\Local\Programs\Python\Pyt ...
- pytest:conftest.py文件
一.fixture scope 为session 级别是可以跨 .py模块调用的,也就是当我们有多个 .py文件的用例时,如果多个用例只需调用一次fixture,可以将scope='session', ...
- PL/SQL 学习分享(续)
事务 事务的概述 事务的特性 回滚点 事务实例练习 动态SQL 动态SQL概述 动态SQL应用场合 动态SQL的执行语法 绑定变量 动态SQL创建表 动态SQL绑定变量 动态SQL综合案例添加数据 使 ...
- Scala:case class
Scala:case class 1.Scala中class.object.case class.case object区别 1.1 class 和 object 关系 1.2 case class ...
- 解决java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/Pattern
明明引入了这个,却提示没有 看下面文章: http://www.maocaoying.com/article/109
- java 生成xml
生成xml @Test public void parseApplicationConfigXML(){ try { SAXReader sax = new SAXReader(); Document ...