如何在Javascript进入无限循环和递归调用时调试javascript?

时间:2012-10-10 09:16:09

标签: javascript debugging

当您处于无限循环或递归调用时,浏览器基本上会停止响应任何内容(在Chrome或FF上)。你看不到日志,无法进入调试器,即使你无法打开控制台本身。浏览器只是冻结。这太烦人了。看来我什么也做不了,只是坐在这里挠挠脑袋......任何人都可以解释如何解决这个问题?

5 个答案:

答案 0 :(得分:54)

您可以尝试的另一个技巧是让Chrome中的Web开发人员工具打开,并在浏览器显然挂起时尝试​​点击暂停。然后它应该在它当前正在执行的行处中断。有些人会走出去,你应该深究这一点。

假设您知道(或怀疑)infite循环发生的函数,您可以添加如下代码:

var calls = 0;
function iSuspectToBeLoopingInfititely() {
  calls += 1;
  if (calls > 100) { debugger; }
}

一旦方法被调用100次,这将停止Chrome中的JavaScript调试器。 注意:如果您确实打开了“开发者工具”窗口,则Chrome只会中断debugger;次来电。

答案 1 :(得分:5)

找到了另一种调试方式。在我的情况下,错误被捕获,因此没有错误记录到控制台。通过复选框Pause on caught exceptions找到了该错误。您可以在Sources标签下的den dev工具中找到该选项。要显示并启用该复选框,请单击最后一个图标:

enter image description here

启用此功能后,调试器将在每个捕获的异常上暂停。

答案 2 :(得分:2)

我今天遇到了同样的问题。寻找解决方案使我想到了这个问题。

同时,我在其发行说明(2018年4月,https://developers.google.com/web/updates/2018/04/devtools#stop)中找到了适用于Chrome的解决方案。

致谢

答案 3 :(得分:1)

我在Chrome中遇到了问题,我会在浏览器窗口中看到'在调试器中暂停'但是无法看到Chrome可能在哪里被混淆,因为它处于循环中...在Firefox中,它认识到它耗时太长,然后在30秒到1分钟后出现一个弹出窗口说文件和一般线#冻结有助于进一步调试并在该区域周围设置断点。

答案 4 :(得分:-3)

您可以使用以下代码停止无限循环。

debugger;