Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当javascript进入无限循环和javascript中的递归调用时,如何调试javascript?_Javascript_Debugging - Fatal编程技术网

当javascript进入无限循环和javascript中的递归调用时,如何调试javascript?

当javascript进入无限循环和javascript中的递归调用时,如何调试javascript?,javascript,debugging,Javascript,Debugging,当您处于无限循环或递归调用中时,浏览器基本上停止响应任何内容(在Chrome或FF上)。您无法查看日志,无法进入调试器,甚至无法打开控制台本身。浏览器只是简单地冻结。这太烦人了。看来我除了坐在这里搔头什么也做不了。。。任何人都可以解释如何解决这个问题?你可以尝试的另一个技巧是打开Chrome浏览器中的Web开发者工具,并在浏览器明显挂起时尝试暂停。然后它应该在当前执行的行处中断。走出去,你应该弄清这件事的真相 假设您知道(或怀疑)infite循环发生的函数,您可以添加如下代码: var call

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

你可以尝试的另一个技巧是打开Chrome浏览器中的Web开发者工具,并在浏览器明显挂起时尝试暂停。然后它应该在当前执行的行处中断。走出去,你应该弄清这件事的真相

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

var calls = 0;
function iSuspectToBeLoopingInfititely() {
  calls += 1;
  if (calls > 100) { debugger; }
}
一旦该方法被调用100次,就会停止Chrome中的JavaScript调试器。
注意:Chrome只会在
调试器中中断

我在Chrome中遇到问题,我会在浏览器窗口中看到“在调试器中暂停”,但看不到在哪里,因为Chrome可能会混淆,因为它处于循环中。。。在Firefox中,它意识到它花费的时间太长,然后在30秒到1分钟后弹出一个弹出窗口,显示文件和常规行“冻结”,这有助于进一步调试并在该区域周围设置断点。

找到了另一种调试方法。在我的例子中,错误被捕获,因此没有错误记录到控制台。通过复选框
捕获异常时暂停
发现错误。您可以在den dev tools的
Sources
选项卡上找到该选项。要显示并启用复选框,请单击最后一个图标:


启用此选项后,调试器会暂停捕获到的每个异常。

在循环启动之前在调试器中设置断点?@PhonicUK有时是不可能的,例如滑块,其中只有一个值会导致无限循环,而您不希望在所有中间值处停止。Chrome处理无限循环的能力非常差,如果它在调试器打开时有一个,它就不应该把devoper锁在外面。这看起来非常有用,尽管我很不幸!(?)它在firefox中似乎没有进入任何无限循环,只有在chrome和safari中:/offtopic没有回答OPquestion@cdalxndr为什么这应该是离题的?在这种情况下,它可以帮助“浏览器停止响应任何东西(在Chrome或FF上)。你看不到日志,无法进入调试器…”实际上它在这种情况下帮助了我!OP要求无限循环,而不是异常。无限循环不会引发异常。捕获的异常可能会在循环中未命中中止条件时导致无限循环!如果捕获到的异常导致无限循环,那么这就是糟糕的编程。捕获异常的目的是处理它们并修复无效行为,这样它们就不会导致无限循环!