本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的行为不相同git
在 VisualStudio 调试器进入断点,默认开启隐函数求值,将会自动调用对应的类型的 DebuggerDisplay 特性里面说明的输出方法,若是对应的对象没有定义 DebuggerDisplay 特性,默认将会调用 ToString 方法。不管是在 DebuggerDisplay 特性仍是在 ToString 方法里面编写变动业务逻辑的代码,都会让在断点调试下和非断点调试下的行为不相同github
如如下代码,个人 xaml 界面以下express
<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>
接下来在后台代码添加一个属性,用来在调试时输出async
public string Debug { get { StackPanel.Children.Add(new TextBlock() { Text = "123" }); return "Foo"; } }
在 MainWindow 添加 DebuggerDisplay 特性,代码以下函数
[DebuggerDisplay("{" + nameof(Debug) + "}")] public partial class MainWindow : Window { }
再写一点代码,用来添加断点spa
[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 调试调用3d
而若是在 get 方法编写业务逻辑,那么调用 get 的次数将会和断点进入次数相关,或和具体获取属性的次数相关调试
更多的代码细节还请到 github 或 gitee 上阅读代码code
能够经过以下方式获取本文的源代码,先建立一个空文件夹,接着使用命令行 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 文件夹