Visual Studio 中条件断点

19

当某个变量等于特定的值时,我想在C#代码中设置一个断点,比如:

MyStringVariable == "LKOH"

我该如何做呢?

我尝试了右键单击断点图标 -> 条件,然后输入 MyStringVariable == "LKOH" ,但 Visual Studio 表示无法评估它。


我通常会修改代码并注入代码,例如:if(MyStringVariable = "LKOH") { int a=1; // 假代码以设置断点 } - Captain Comic
编辑 - 将 = 更改为 ==。这只是一个拼写错误。我在调试器中当然使用了 ==。 - Captain Comic
哦,又有一个线索了。实际上我正在使用一个属性。我的正确表达式是Exchange.Name == "LKOH",其中Name是属性。也许调试器无法处理属性? - Captain Comic
实验过了。条件适用于局部变量,但不适用于类属性。我错了吗? - Captain Comic
1
是的,你错了。条件适用于类实例属性。请看我的回答。 - Jamie Ide
7个回答

37

25

示例代码:

static void Main(string[] args) {
  string myvar;
  for (int ix = 0; ix < 10; ++ix) {
    if (ix == 5) myvar = "bar"; else myvar = "foo";
  }    // <=== Set breakpoint here
}

条件: myvar == "bar"

运作良好。


7

就像在代码中一样,你需要使用:

MyStringVariable == "LKOH"

双等号是关键。没有双等号,就会提示无法评估,因为您的表达式不能被评估为布尔值。

5
您应该能够使其正常工作。您在条件中使用了Exchange实例名称吗?条件应该是像myExchange.Name == "LKOH"而不是Exchange.Name == "LKOH"
顺便说一下,使用赋值运算符=而不是相等运算符==也可以工作,但这将设置属性并浪费您半个小时的时间来弄清楚发生了什么。我昨天刚犯了这个错误。

4

在我的案例中,我忘记了我正在调试一个VB应用程序。

在VB中,等于号是=,而不是像许多其他语言一样的==,因此我的条件断点需要是myString = "someValue"而不是myString == "someValue"


1

你需要在断点处保持测试变量的作用域。

var x = "xxx";
{ 
  var y = "yyy";
}

brak(); // x is in scope, y isn't

0

对我来说,这使得它触发了条件断点。

Conditional breakpoint


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接