Chrome在我的主干网页上冻结:如何调试?

时间:2012-11-13 08:48:33

标签: javascript google-chrome backbone.js google-chrome-devtools

我正在进行的项目涉及一个“计划”屏幕,它完全由backbone.js制作(应用程序的其他页面不是)。

我的问题是,有时候,Chrome冻结并且网络视图停止响应任何互动。有时,我可以设法退出chrome本身,但通常控件也不会回答。

我非常确信这与js代码有关。在我看来,当脚本花费太多时间或无限循环时,Chrome可以检测到这一点并中断脚本。但是,由于情况并非如此,我认为有太多的js对象留在内存中。

无论原因是什么,我想知道哪些chrome dev工具可以帮助我。虽然我不是js的初学者,旁边设置断点并调用console.log,但我不知道如何调试JS应用程序。如果dev工具更适合我,我不反对使用其他浏览器。

非常感谢你的时间!

FTR:这是一款rails 3.2.8 app,使用mongodb,& Backbone.js 0.9.2。 js代码用coffeescript编写。这个问题发生在我的macbook air 2012运行的山狮以及在Windows 7上运行的客户端机器上。问题至少出现在chrome 22& 23。

4 个答案:

答案 0 :(得分:1)

使用Javascript CPU分析器,我能够找到似乎负责冻结的功能组。

我仍然愿意接受有关调试javascript代码的任何建议/资源。

答案 1 :(得分:0)

在循环中创建一个console.log,并检查它是否在所有chrome版本上冻结了相同的点。有一个限制,请参见Browser Javascript Stack size limit

也许添加一些代码?因为可能存在一些内存泄漏,尤其是事件处理程序!

答案 2 :(得分:0)

我要做的是使用console.log来解决问题的漫长而疲惫的方法。 - - 在这种情况下。 在你的情况下,顺便提一下THX(用CPU分析器找到罪犯,下次我会尝试),我猜这些罪犯可能是某些功能“回调”自己......可能是通过某种形式事件处理/鼓泡/回调组合。

通常会发生的事情是它只是无法识别无限循环,因为回调堆栈有点“破碎”。因此,它永远不会抛出浏览器错误。

如果你有运气,它不会杀死浏览器足够快以杀死控制台。我确实有这个,控制台被杀死(保持沉默),coffeescript文件甚至没有加载到调试器中(我使用JS-MVC中的JIT-coffee-to-js-translator)...页面冻结或没做任何事......

所以,如果你确实很幸运并且调试器吐出你的console.logs,你就可以猜出你不想要的循环隐藏在哪里。只需查看输出语句的重复顺序即可。

答案 3 :(得分:0)

当然你知道你可以设置断点吗?甚至是条件断点

我目前正在努力解决一个类似的声音循环 - 我想在紧急情况下你的代码中的一些alert()调用至少会减慢循环

或者可能是一些等待电话bad idea

我的循环运行得如此之快,我松开了我的控制台日志!