本文記錄我寫的逗比代碼,我在 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 文件夾