2

我在我的 javascript 代码中写了一个无限循环。使用 WebKit 的 Web Inspector,我如何终止执行?我必须退出 Safari 并重新打开它(当然是在更改我的代码之后)。

编辑:更具体地说,我正在寻找一种进入循环执行进程/线程的方法,以查看为什么循环没有终止。一个类比是在 GDB 中,我可以在其中执行 ^C 并进入该过程。我不是在寻找杀死我的网络浏览器的方法。我已经很擅长了。

4

4 回答 4

1

我对WebKit不熟悉,但这听起来像是一个常见的问题,我通常调试如下:在循环范围之外声明一个整数,并为每次迭代增加它,然后在迭代计数超过时抛出异常最大预期可能的迭代次数。因此,在伪代码中,可以使用以下内容来调试此问题:

var iterations = 0;
var greatestPossibleNumberOfValidIterations = 500;
while(shouldLoopBooleanTest){
  iterations++;
  if(iterations>greatestPossibleNumberOfValidIterations){
     //do debugging/error handling
  }
} 

我不希望这足够具体以保证接受的答案,但我希望它可以帮助您解决问题。

于 2010-12-28T20:46:54.630 回答
0

您是否尝试过top查看进程树?找到程序的 PID,然后键入kill -9 [PID].

于 2010-12-19T06:02:19.580 回答
0

你试过用F11吗?这是步入的关键:https ://trac.webkit.org/wiki/WebInspector

于 2010-12-28T05:13:15.423 回答
0

在使用 Firefox(我知道问题没有指定 Firefox,但我只是把它扔进去,以防它对某人有帮助)、Safari 和 Chrome 时,我发现没有一致的方法可以进入无限循环,但是如果需要,有一些方法可以设置执行以中断循环。请参阅下面的测试代码。

火狐

彻头彻尾的垃圾。它只是站在那里旋转它的彩虹。我不得不杀了它。

苹果浏览器

Safari 的好处是它最终会弹出一个对话框,询问您是否要停止。你应该说是的。然后点击command-option i调出 Web Inspector。源应该弹出说 Javascript 超过了超时。点击右侧顶部的暂停按钮,然后刷新。代码将重新加载,现在逐步执行:我喜欢使用command-;,因为它会逐步执行每个调用。如果你有复杂的代码,你可能永远不会走到最后。不过不要打continuecommand-/),否则你会回到第一格。

铬合金

三者中最有用的。如果您天真地加载代码,它将永远持续下去。但是,在加载页面之前,打开 Web Inspector 并选择“始终加载资源”。然后重新加载页面。在页面尝试加载时,您可以单击脚本并在运行时暂停 Javascript。这就是我一直在寻找的。

代码

<html>
  <head></head>
  <body onload="TEST.forever.loop()">
    Nothing
  </body>
  <script type="text/javascript">
    TEST = {};
    TEST.forever = {
      loop : function() {
        var i = 0;
        while (i >= 0) {
          i++;
        }
      }
    };
  </script>
</html>
于 2010-12-28T11:52:42.603 回答