首页 文章

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

提问于
浏览
1

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

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

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

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

非常感谢你的时间!

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

4 回答

  • 0

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

    我仍然对调试javascript代码的任何建议/资源持开放态度 .

  • 0

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

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

  • 0

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

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

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

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

  • 1

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

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

    或者也许是一些等待电话(bad idea

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

相关问题