VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同
本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的行为不相同
在 VisualStudio 调试器进入断点,默认开启隐函数求值,将会自动调用对应的类型的 DebuggerDisplay 特性里面说明的输出方法,如果对应的对象没有定义 DebuggerDisplay 特性,默认将会调用 ToString 方法。无论是在 DebuggerDisplay 特性还是在 ToString 方法里面编写变更业务逻辑的代码,都会让在断点调试下和非断点调试下的行为不相同
如以下代码,我的 xaml 界面如下
<Window x:Class="NearberjalnodarGahayjekuqi.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:NearberjalnodarGahayjekuqi"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel x:Name="StackPanel">
</StackPanel>
</Grid>
</Window>
接下来在后台代码添加一个属性,用来在调试时输出
public string Debug
{
get
{
StackPanel.Children.Add(new TextBlock()
{
Text = "123"
});
return "Foo";
}
}
在 MainWindow 添加 DebuggerDisplay 特性,代码如下
[DebuggerDisplay("{" + nameof(Debug) + "}")]
public partial class MainWindow : Window
{
}
再写一点代码,用来添加断点
[DebuggerDisplay("{" + nameof(Debug) + "}")]
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Foo();
}
private async void Foo()
{
while (true)
{
await Task.Delay(1000);
}
}
public string Debug
{
get
{
StackPanel.Children.Add(new TextBlock()
{
Text = "123"
});
return "Foo";
}
}
}
在 Foo 方法里面加上断点,此时可以看到,在进入断点时,将会让界面添加 TextBlock 元素,如果没有进入断点将不会修改界面
这是因为在 DebuggerDisplay 特性里面,将会输出被花括号包含的属性名对应的属性的值。也就是对应的属性的 get 方法将会在 VisualStudio 调试调用
而如果在 get 方法编写业务逻辑,那么调用 get 的次数将会和断点进入次数相关,或和具体获取属性的次数相关
更多的代码细节还请到 github 或 gitee 上阅读代码
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 8b7af3786fd9544edeb8213d23f699938d75eb44
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
获取代码之后,进入 NearberjalnodarGahayjekuqi 文件夹
VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同的更多相关文章
- WCF X.b 操作引用了已经从 Y.b 操作导出的消息元素 [http://tempuri.org/:b]。可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性更改其中一个操作的名称...
详细错误如下: 很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为: System.InvalidOperationExc ...
- WPF:数据绑定--PropertyChangeNotification属性更改通知
PropertyChangeNotification属性更改通知 实现效果:1.拍卖金额自动随属性值变化而通知界面绑定的值变化. 关键词 : INotifyPropertyChanged Obse ...
- iOS: ARC和非ARC下使用Block属性的问题
1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非AR ...
- asp.net 逻辑操作符与(&&),或(||),非(!)
逻辑操作符与(&&),或(||),非(!)能根据参数的关系返回布尔值 public class bool{ public static void main(string [] args ...
- IOS开发 ARC和非ARC下使用Block属性的问题
1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非AR ...
- 新唐NDA102EC1中更改UUART1作为调试串口打印输出调试信息
新唐NDA102EC1中更改UUART1作为调试串口打印输出调试信息 参考网上STM32修改fputc(int ch, FILE *f),把串口打印函数printf()重定向到UUART1模块的端口输 ...
- 22 Flutter仿京东商城项目 inappbrowser 加载商品详情、保持页面状态、以及实现属性筛选业务逻辑
加群452892873 下载对应21可文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter_swi ...
- 点击按钮添加一行,和本行的删除功能,序号变动,name属性更改
<!--html结构--> <div> <input type="button" value="添加一行" onclick=&qu ...
- 属性更改通知(INotifyPropertyChanged)——针对ObservableCollection
问题 在开发webform中,wpf中的ObservableCollection<T>,MSDN中说,在添加项,移除项时此集合通知控件,我们知道对一个集合的操作是CURD但是恰恰没有Upd ...
- element UI table show-overflow-tooltip属性更改背景色和字体颜色
.el-tooltip__popper { width: 80%;/*修改宽度*/ background: #000 !important;/*背景色 !important优先级*/ opacity ...
随机推荐
- java 发送 http 请求练习两年半(HttpURLConnection)
1.起一个 springboot 程序做 http 测试: @GetMapping("/http/get") public ResponseEntity<String> ...
- 重返ubuntu世界
一直对"重返"两个字充满了情怀感,因为会想起小时候看的一本龙珠同人的标题,它就唤作<重回龙珠世界>.最近这五年基本都是在MacOS下工作和学习的,也习惯用MacOS.就 ...
- 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
private static void stringSubLen(String msg) { int max = 0; int left = 0; Map<Character,Integer&g ...
- .net和java串口通讯压力测试对比
最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机. 要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒. 于是 ...
- Docker 解决 `denied: requested access to the resource is denied`
背景 由于不可描述的原因,相对于以前,最近在更加频繁的迁移服务器,简单的 Shell 脚本已经不能满足需求了,于是将所有的项目 Docker 化. 部分不含敏感配置的项目准备放到 DockerHub ...
- 在Keycloak中实现多租户并在ASP.NET Core下进行验证
Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证.单点登录(SSO).身份联合.用户注册.用户管理.角色映射.多因素认证和访问控制等.它广泛应用于企业和云服务 ...
- Jchardet——支持检测并输出文件编码方式的组件
简介 Jchardet是OpenAtom OpenHarmony(以下简称"OpenHarmony")系统的一款检测文本编码的组件.当上传一个文件时,组件可以检测并输出该文件中 ...
- Pandas通用函数和运算
Pandas继承了Numpy的运算功能,可以快速对每个元素进行运算,即包括基本运算(加减乘除等),也包括复杂运算(三角函数.指数函数和对数函数等). 通用函数使用 apply和applymap app ...
- Python将依赖包导出到requirements.txt文件
代码 # 查询环境中已经安装的库 pip list # 将所有依赖库导出到 requirements.txt 文件 pip freeze > requirements.txt
- .Net 代码分析工具对比 visual studio 2022 current
目录 原因 背景知识 名词解释 分析器 分析器在IDE里 目标 查找思路及过程 CodeMaid Roslyn StyleCop.Analyzer StyleCop? StyleCop.Analyze ...