调试时如何"run until this variable changes"?



在调试C#时,我经常想知道变量的值何时发生变化,然后调查程序的状态。

目前,我是这样做的:

  1. 观察列表有问题的变量
  2. 物理垃圾邮件F10(Step Over的快捷方式),直到我看到值更改

然而,所需F10的数量令人讨厌。

我想,这肯定是自动化的。但是我在我的Microsoft Visual C#速成版中找不到这个功能,这让我很惊讶。毕竟,观察列表会自动用亮红色突出显示更改的值。

我是不是错过了什么?

快速版的简单技巧:

private string myValue;
public string MyValue
{
  set
  {
    if (this.myValue != value) Debugger.Break();
    this.myValue = value;
  }
}

条件断点是您想要的,但它们在Visual Studio学习版中似乎不可用。

在Visual Studio(非速成版)中,它的工作方式是创建一个条件断点,该断点的表达式等于您的监视值,并将"已更改"作为断点条件。

  1. 设置希望代码暂停的断点
  2. 打开"断点"窗口(调试->窗口->断点)
  3. 右键单击断点并选择"条件…"
  4. 将条件设置为变量名称,然后选择Has Changed单选按钮
  5. 单击"确定",然后按正常方式调试:)

以下是我在Visual Studio中的操作方法。按F9键或单击最左边距设置断点。然后在出现的红点上单击鼠标右键,然后选择"条件"命令。还有其他选择。

但是,Visual Studio学习版可能不支持此功能。

您可以使用条件断点

请参阅此

您可以编写一个if语句来检查更改,并在该if语句中发生一个断点,因此它最初会中断,然后单击resume,它会继续,直到达到该断点。

使用调试器。根据某个运行时条件中断,或者右键单击某个断点,然后选择条件中断->已更改

编辑:在Express 中对此一无所知

如果您想在某个断点捕获变量更改,而不是精确地捕获更改的位置,那么设置断点,右键单击它并选择"条件"。假设变量名为X,当前值为A。在条件字段中输入"X!=A"。

现在,只有在X更改为A以外的某个值后,才会命中断点。

最新更新