1

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

我的问题是,Chrome 有时会冻结,并且 Web 视图会停止响应任何交互。有时,我可以设法退出 chrome,但通常控件也不会响应。

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

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

非常感谢您的时间!

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

4

4 回答 4

1

Using the Javascript CPU profiler, I was able to find the group of functions that seems to be responsible for the freezing.

I'm still open to any advice/ressource on debugging javascript code.

于 2012-11-13T10:17:57.490 回答
0

在循环中创建一个 console.log 并检查它是否在所有 chrome 版本上冻结相同的点。有一个限制,请参阅浏览器 Javascript 堆栈大小限制

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

于 2012-11-13T08:53:32.230 回答
0

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

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

或者可能是一些等待电话坏主意

我的循环运行得如此之快,以至于我丢失了控制台日志!

于 2013-05-20T04:20:57.780 回答
0

我要做的是用console.log弄脏你的手的漫长而疲惫的方法。 - - 在这种情况下。在您的情况下,顺便提一下 THX(使用 CPU 分析器找到违规者,我会在下一轮尝试),我猜违规者可能是某些函数自己“回调”.. 可能通过某种事件处理/冒泡/回调组合。

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

如果你有任何运气,它不会足够快地杀死浏览器来杀死控制台。我有时确实遇到过这种情况,控制台被杀死(保持沉默),甚至没有在调试器中加载咖啡脚本文件(我在 JS-MVC 中使用 JIT-coffee-to-js-translator)......页面冻结或什么都不做...

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

于 2012-11-15T02:26:40.553 回答