我在我的javascript代码中写了一个无限循环。使用WebKit的Web Inspector,如何终止执行?我必须退出Safari并重新打开它(当然在更改我的代码之后)。
编辑:更具体地说,我正在寻找一种方法来进入循环执行进程/线程,看看为什么循环没有终止。类比将在GDB中我可以做^ C并进入流程。我不是在想办法杀死我的网络浏览器。我已经相当擅长。答案 0 :(得分:1)
我不熟悉WebKit,但这听起来像我常常调试的常见问题如下:声明一个超出循环范围的整数,并在每次迭代时递增它,然后抛出异常时迭代计数超过了最大预期可能的迭代量。因此,在伪代码中,可以使用以下内容来调试此问题:
var iterations = 0;
var greatestPossibleNumberOfValidIterations = 500;
while(shouldLoopBooleanTest){
iterations++;
if(iterations>greatestPossibleNumberOfValidIterations){
//do debugging/error handling
}
}
我不希望这具体到足以保证接受的答案,但我希望它可以帮助您解决问题。
答案 1 :(得分:0)
您是否尝试top
查看进程树?找到程序的PID,然后键入kill -9 [PID]
。
答案 2 :(得分:0)
您是否尝试过使用F11?这是步入的关键:https://trac.webkit.org/wiki/WebInspector
答案 3 :(得分:0)
在使用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>