我在我的 javascript 代码中写了一个无限循环。使用 WebKit 的 Web Inspector,我如何终止执行?我必须退出 Safari 并重新打开它(当然是在更改我的代码之后)。
编辑:更具体地说,我正在寻找一种进入循环执行进程/线程的方法,以查看为什么循环没有终止。一个类比是在 GDB 中,我可以在其中执行 ^C 并进入该过程。我不是在寻找杀死我的网络浏览器的方法。我已经很擅长了。
我在我的 javascript 代码中写了一个无限循环。使用 WebKit 的 Web Inspector,我如何终止执行?我必须退出 Safari 并重新打开它(当然是在更改我的代码之后)。
编辑:更具体地说,我正在寻找一种进入循环执行进程/线程的方法,以查看为什么循环没有终止。一个类比是在 GDB 中,我可以在其中执行 ^C 并进入该过程。我不是在寻找杀死我的网络浏览器的方法。我已经很擅长了。
我对WebKit不熟悉,但这听起来像是一个常见的问题,我通常调试如下:在循环范围之外声明一个整数,并为每次迭代增加它,然后在迭代计数超过时抛出异常最大预期可能的迭代次数。因此,在伪代码中,可以使用以下内容来调试此问题:
var iterations = 0;
var greatestPossibleNumberOfValidIterations = 500;
while(shouldLoopBooleanTest){
iterations++;
if(iterations>greatestPossibleNumberOfValidIterations){
//do debugging/error handling
}
}
我不希望这足够具体以保证接受的答案,但我希望它可以帮助您解决问题。
您是否尝试过top
查看进程树?找到程序的 PID,然后键入kill -9 [PID]
.
你试过用F11吗?这是步入的关键:https ://trac.webkit.org/wiki/WebInspector
在使用 Firefox(我知道问题没有指定 Firefox,但我只是把它扔进去,以防它对某人有帮助)、Safari 和 Chrome 时,我发现没有一致的方法可以进入无限循环,但是如果需要,有一些方法可以设置执行以中断循环。请参阅下面的测试代码。
彻头彻尾的垃圾。它只是站在那里旋转它的彩虹。我不得不杀了它。
Safari 的好处是它最终会弹出一个对话框,询问您是否要停止。你应该说是的。然后点击command-option i
调出 Web Inspector。源应该弹出说 Javascript 超过了超时。点击右侧顶部的暂停按钮,然后刷新。代码将重新加载,现在逐步执行:我喜欢使用command-;
,因为它会逐步执行每个调用。如果你有复杂的代码,你可能永远不会走到最后。不过不要打continue
(command-/
),否则你会回到第一格。
三者中最有用的。如果您天真地加载代码,它将永远持续下去。但是,在加载页面之前,打开 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>