打破从监视窗口或立即窗口中无休止循环的问题。

3

我写了一个使用while循环的应用程序。在我的代码中,我忘记在特定条件下放置break。我正在从调试器中运行应用程序。现在我需要退出循环。有些人可能会说只需停止它并放置那个break行,但我无法在此时做到这一点。更改代码并再次运行需要很长时间。是否有办法从观察窗口或即时窗口停止循环?

以下是我使用的循环示例:

while(true)
{
    //do the work
    if(something happens)
        break; //I missed this part!
}
//some other things

感谢您的帮助!
2个回答

1
你应该重写while循环,使用一个变量代替true,然后可以使用调试器将变量的值更改为false并结束循环,就像这样:
bool doWork = true;

while(doWork)
{
    // Do looping logic here
}

现在在调试器中,如果你想跳出循环,你可以在循环中断处更新 doWork 变量为 false

1
谢谢您的建议,我已经解决了。正如我所说的,程序现在正在运行。停止调试器并更改代码会给我带来很多问题。这就是为什么我想知道是否可以通过Watch或Immediate Window停止它。 - Dilshod
1
既然您无法控制程序,为何不停止它并修复逻辑中的问题呢? - Karl Anderson
1
如果我能打破循环,那么余下的代码将完成工作。这样不会给我带来更多的工作。 - Dilshod
3
如果您在调试器中,则可以在循环中的任何位置设置断点。当命中断点时,请将高亮显示的行拖动到循环下方的第一行,并按F5继续执行。 - Karl Anderson
1
我已经尝试过了,我可以将其移动到循环内的任何位置,但无法向下拖动。 - Dilshod

0

Karl 是正确的。这里是使用特定指令的 for 循环版本:

(在 VS2010 中,您可以将鼠标悬停在 isTrue 上,当您在工具提示中看到 'false' 时,右键单击它,然后单击编辑值,将 false 改为 true)

 bool isTrue = true;
 for (; isTrue ; )
 {
      Thread.Sleep(1000);
 }

谢谢您的回答,但在我的情况下它无法做任何事情。请查看我的示例。它运行了很长时间,那时无法停止它并执行像您的示例一样的操作。 - Dilshod
我也无法在即时窗口中使用break命令,由于某种原因,在运行时它被忽略了。但是,当在循环中更改条件的值时,它会自动跳出循环而无需使用“break”命令。我刚刚重新测试了一下,并没有遇到任何问题。编辑:我的意思是您不需要更改循环的条件,只需更改一个值,就可以使条件不再满足而跳出循环。 - Chris
我理解你想要解释的内容。你看到我的例子了吗?我在静态地使用关键字“true”,它不是一个变量。有没有办法在运行时将其更改为false?我可以停止程序并像你建议的那样随时更改它,但我不想这样做。 - Dilshod
不可以在运行时更改关键字“true”的值。 - Chris

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