【问题标题】:Extjs Uncaught RangeError: Maximum call stack size exceeded [closed]Extjs Uncaught RangeError:超过最大调用堆栈大小[关闭]
【发布时间】:2014-01-09 11:43:34
【问题描述】:

我知道可能在我的代码的某个地方,我再次变得如此聪明,以至于我设法编写了一个递归代码块。但我能够找到它的位置。 Chrome 错误控制台仅向我提供错误发生在 app.js line:1234 的信息。如何跟踪(调试)我的代码的哪一部分是导致错误的原因?有没有机会在浏览器中查看堆栈?

【问题讨论】:

  • 这个错误是由于无限循环而产生的。所以请检查你的代码是否有任何循环,它不应该无限循环。
  • 当您在其他 view.js 文件中引用现有视图 (xtype) 或在其内部引用视图文件导致无限循环时,即使发生此错误。

标签: javascript extjs stack


【解决方案1】:

要找到无限循环,我执行以下操作:

  1. 打开页面
  2. 打开开发工具
  3. 为我认为导致问题的函数设置断点
  4. 重新加载页面(这样,您可以在第一次调用函数时中断,通常很有帮助)
  5. 执行操作
  6. 正常调试(步骤、继续等)

要查看函数调用堆栈,请单击 chrome 开发工具顶部的“源”选项卡。当你的程序到达你的断点,或者你点击暂停按钮(看起来像这样:||),你可以点击右侧面板上的三角形“调用堆栈”项。这将显示堆栈中当前有哪些函数。

要查看具有可变数据的实际堆栈,您需要记录配置文件或时间线。要记录配置文件,请单击“配置文件”选项卡,然后单击“获取堆快照”。我喜欢等到我的程序到达我认为是问题所在区域的断点,然后拍摄快照。有关快照的详细信息,请参阅this page

记录时间线可能会有所帮助。时间线可让您记录一段时间内发生的所有事件、帧和内存分配。要拍摄一张,请单击“时间轴”选项卡。然后,单击底部放大镜图标旁边的黑色圆形图标。图标将变为红色,表示正在录制。此时,您应该执行您认为引起问题的操作,然后立即再次单击按钮停止录制。将时间线与标准调试技术相结合可以让您执行一个相当漂亮的技巧。您可以设置断点,开始记录时间线,然后手动单步执行您的代码。这使您可以暂停代码的执行、停止记录时间线并查看正在发生的事情。

【讨论】:

  • 我的回答不正确吗?
【解决方案2】:

在 ExtJs 中,当类文件以 Ext.create( 而不是 Ext.define( 开头时,会发生无限循环。

也许这里就是这种情况?

【讨论】:

    【解决方案3】:

    正如另一位用户指出的那样,我的问题是使用 Ext.create 而不是 Ext.define。

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 2017-05-23
      • 1970-01-01
      • 2018-03-18
      • 2011-12-01
      • 1970-01-01
      • 2022-09-29
      • 2016-10-19
      相关资源
      最近更新 更多