谷歌浏览器:如何随机调试"超出最大调用堆栈大小"错误

Jo *_*iss 30 javascript google-chrome

在一个复杂的JavaScript应用程序(使用jQuery和Ember)中,JavaScript偶尔会在页面加载期间或在页面上执行操作时随机崩溃.错误如下(截图):

Uncaught RangeError: Maximum call stack size exceeded
  Class.proto
  Class.proto
  ...
Run Code Online (Sandbox Code Playgroud)

...有几页Class.proto堆栈跟踪线,但没有任何源/线信息,即使在跟踪的底部.

我知道这指向无限递归,这可能发生在事件系统中,但对我来说没有明显的起点.

我已经能够在Chrome Canary(22.0.1209.0)中重现这一点,而不是Chrome稳定版或Firefox.该应用程序不与任何外部服务或发出任何Ajax请求.

由于它偶尔发生,并且没有明显的原因,并且因为没有可用的堆栈跟踪,所以我无法追踪原因.

我的问题:我可以做些什么来调试这个问题?

Spl*_*ity 19

在Chrome开发者工具栏中启用"中断例外".用这个这是图标" 源"选项卡上工具栏页脚中的图标(有3个状态!)

它应该停止你的代码,你可以看到堆栈!

  • 好主意,谢谢!有趣的是,Chrome拒绝将其指向任何源代码行."未受伤害的突破"实际上并没有打破"未捕获的RangeError",并且在"全部突破"中我甚至无法重现崩溃.所以这指出Chrome中存在问题.知情人士告诉我,V8(Canary和dev)中存在一个导致此问题的错误,并且已经有一个修复,只是等待被释放.因此,我将暂时解决此问题并在Chrome上测试我的应用程序. (9认同)
  • 从 chrome 75(2019 年)开始,“异常中断”在这种特定类型的异常中不起作用(或者,至少在我的代码中)。这个答案不应该再被接受。 (3认同)