我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误

它说

超过最大调用堆栈大小。

这个错误到底是什么意思,它是否完全停止处理?

Safari浏览器也有任何修复(实际上是在iPad Safari上,它说

JS:执行超时

我认为这是相同的调用堆栈问题)


当前回答

检测堆栈溢出的问题是,有时堆栈跟踪将被解开,您将无法看到实际发生了什么。

我发现Chrome的一些较新的调试工具在这方面很有用。

点击Performance选项卡,确保Javascript样本被启用,你会得到类似这样的结果。

溢出的地方很明显!如果单击extendObject,您将能够看到代码中确切的行号。

你也可以看到时间,可能有帮助,也可能没有帮助,或者转移注意力。


另一个有用的技巧是,如果你不能真正发现问题,在你认为问题所在的地方放置大量的console.log语句。上面的步骤可以帮助你做到这一点。

在Chrome中,如果你反复输出相同的数据,它会像这样显示问题更清楚。在这个例子中,堆栈在最终崩溃之前击中了7152帧:

其他回答

对我来说 我错误地分配了相同的变量名,并给val函数“class_routine_id”

var class_routine_id = $("#class_routine_id").val(class_routine_id);

应该是这样的:

 var class_routine_id = $("#class_routine_id").val(); 

在我的例子中,我使用以下方法将一个大字节数组转换为字符串:

String.fromCharCode.apply(null, new Uint16Array(bytes))

字节包含数百万个条目,这对于堆栈来说太大了。

检测堆栈溢出的问题是,有时堆栈跟踪将被解开,您将无法看到实际发生了什么。

我发现Chrome的一些较新的调试工具在这方面很有用。

点击Performance选项卡,确保Javascript样本被启用,你会得到类似这样的结果。

溢出的地方很明显!如果单击extendObject,您将能够看到代码中确切的行号。

你也可以看到时间,可能有帮助,也可能没有帮助,或者转移注意力。


另一个有用的技巧是,如果你不能真正发现问题,在你认为问题所在的地方放置大量的console.log语句。上面的步骤可以帮助你做到这一点。

在Chrome中,如果你反复输出相同的数据,它会像这样显示问题更清楚。在这个例子中,堆栈在最终崩溃之前击中了7152帧:

我试图给一个变量赋值,一个没有声明的变量。

声明变量修正了我的错误。

在我的例子中,在app。module中。ts,我得到这个错误,因为我在imports和entryComponents中声明了组件。

Example:

import { MyComponent } from '....';

@NgModule({
  declarations: [
    MyComponent 
  ],
  imports: [
    MyComponent  -- > remove this from here!!!!
  ],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [MyComponent]
})
export class AppModule { }