【问题标题】:Breaking the endless loop from watch or immediate window打破手表或即时窗口的无限循环
【发布时间】:2013-09-08 17:50:13
【问题描述】:

我编写了使用 while 循环的应用程序。在我的代码中,我忘记将break 置于特定条件下。我正在从调试器运行应用程序。现在我需要退出循环。有些人可能会说停止它并放入断线,但我现在不能。更改代码并再次运行需要很长时间。有没有办法从监视窗口或立即窗口中阻止它?

这是我拥有的循环示例:

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

感谢您的帮助!

【问题讨论】:

    标签: c# loops while-loop immediate-window


    【解决方案1】:

    您应该重写您的while 循环以使用变量而不是true,然后您可以使用调试器将变量的值更改为false 并结束循环,如下所示:

    bool doWork = true;
    
    while(doWork)
    {
        // Do looping logic here
    }
    

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

    【讨论】:

    • 感谢您的建议(中断)我已修复它。正如我告诉程序现在正在运行。停止调试器并更改代码会给我带来很多问题。这就是为什么我问我是否可以从 Watch 或 Immediate Window 中阻止它。
    • 既然你无法控制程序,为什么不想停止它并修复你的逻辑问题?
    • 如果我可以打破循环,那么其余的代码将完成工作。那么这不会导致我做更多的工作。
    • 如果你在调试器中,那么在循环中的任意位置放置一个断点,当断点被击中时,然后将突出显示的行向下拖动到循环下方的第一行并按F5继续开。
    • 我已经试过了,我可以将它向上或循环内的任何位置移动,但不能向下拖动。
    【解决方案2】:

    Karl 是正确的.. 在带有特定说明的 for 循环中也是如此..:

    (在VS2010中,您可以将鼠标悬停在isTrue上,在工具提示中看到'false'时右键单击,然后单击编辑值,然后输入true而不是false)

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

    【讨论】:

    • 感谢您的回答,但就我而言,它无能为力。看我的例子。它运行了很长时间,当时无法停止并执行您的示例。
    • 我也无法在即时窗口中使用 break,由于某种原因,在运行时立即使用时它会被忽略..但是当在循环中更改条件的值时,它无需使用'break'就可以爆发,我只是再次测试了这个并且没有遇到任何问题。编辑:我的意思是你不改变循环的条件,你只是改变一个导致条件不再评估为真的值..
    • 我明白你想解释什么。你看到我的例子了吗?我静态使用关键字“true”,它不是变量。有没有办法在运行时将 true 更改为 false ?我可以停止我的程序并按照您的建议进行更改,并在我想要的任何时候中断它,但我不想这样做。
    • 不,您不能在运行时更改关键字“true”的值。
    猜你喜欢
    • 2013-03-08
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多