35

我正在使用Visual Studio 2010,并且我知道此功能在C++中可用。当变量在.NET中获取特定值时,我可以设置断点吗?

我需要调试一些代码,将变量更改为多个值。我想在特定情况下调试代码,当变量获取特定值时。我知道我可以添加if(var == value),但是有没有优雅的方法可以做到这一点?

另一个问题,我可以设置一个断点,当一个变量一般被改变?

回答

71

这当然是可以设置的条件就像接收某个值的变量一样。这被称为断点条件。要创建一个,请执行以下操作。

  • 在点设置一个断点变量的变化
  • 右键单击该断点,然后选择“条件”,在有条件的
  • 类型,如“theNewValue == 42”

现在,只有当条件计算结果为真时,断点才会出现。

您要求的第二个项目,当变量值因任何原因而发生变化时中断,称为数据断点。这些仅适用于C++代码。这不是C#中的选项,VB.NET或任何其他托管语言。

+0

你知道为什么数据断点在托管语言中不可用吗? – Delashmate

+3

@删除它是CLR调试基础设施的限制。 Visual Studio的手基本上是捆绑在一起的,直到CLR提供能力 – JaredPar

+0

好吧,我希望它不是那么复杂的问题,为什么CLR不支持这个选项? – Delashmate

4

只要您使用Express以外的Visual Studio版本,则可以使用breakpoint condition在C#中实现此目的。

在断点条件对话框中,输入在条件框中输入一个有效的表达,如myLocalVariable> 1

...选择先后换过如果当表达式的值发生变化时你想中断。

要到先后换过选项,在断点窗口中右键单击您的断点,然后选择条件...,然后检查下面的截图。

Has Changed option for breakpoint conditions

+0

好了,现在我明白了,我一直在寻找的,当变量一般得到了改变得到通知,意味着创建数据断点..这样,它是更普遍.. – Delashmate

+0

你可以有一个计时器来检查这个 – beppe9000

3

添加断点与F9 - 右键单击​​它并选择"Condition..." - 现在你可以添加一个布尔条件,如果该条件的计算结果为真,断点将只被打到。

0

你可以做这两件事情。

  1. 在VS中设置断点。右键单击边距中的红点并选择添加条件。在那里你可以说var==value并选择“是真的”。
  2. 您可以通过上面的对话框中的“已更改”选项来实现。
3

这取决于你的断点的范围。如果变量不是本地的或不是静态的,你将无法做到。

要设置断点的情况下,右键单击它,你应该得到这个画面:

Enter image description here

选择条件 ...

相关问题