我有一个离子/角度项目,我暂停了一段时间。我继续处理它,但控制台中出现错误。用户效果是,10-15 秒内没有显示任何内容,然后我的 google 已加载,但随后我没有看到任何故障。
core.js:4197 ERROR RangeError: Maximum call stack size exceeded
at MapSubscriber._error (Subscriber.js:75)
at MapSubscriber.error (Subscriber.js:55)
at MergeMapSubscriber.notifyError (OuterSubscriber.js:7)
at InnerSubscriber._error (InnerSubscriber.js:14)
at InnerSubscriber.error (Subscriber.js:55)
at CatchSubscriber._error (Subscriber.js:75)
at CatchSubscriber.error (Subscriber.js:55)
at CatchSubscriber.error (catchError.js:32)
at MergeMapSubscriber.notifyError (OuterSubscriber.js:7)
at InnerSubscriber._error (InnerSubscriber.js:14)
我搜索了一下,我已经从 Angular 10 更新到 Angular 11,更新了所有库,在 stackoverflow 上找到了很多答案,包括这个 Angular 7 错误 RangeError:超出最大调用堆栈大小
但我不知道哪个区域会导致问题。
我尝试在我所在页面的
ngOnInit
/constructor
上评论所有内容,但没有成功。
我怎样才能找到此类错误的根本原因?我真的很迷茫,我不知道该怎么办,这只会让我的应用程序冻结 10-15 秒然后崩溃。
在此之后我遇到了 Firebase 超时,但我猜这是因为 Angular 太忙于处理这个调用堆栈问题。
这不是一个普遍的答案,但我希望它能给出一些例子:
在我的例子中,我从模块 B 引用了模块 A,从模块 A 引用了模块 B,所以这个循环引用导致了堆栈溢出,从而产生了这个结果。
在我的例子中,错误是由“循环引用错误”引起的,就像此类堆栈溢出错误经常出现的情况一样。我使用一个工具自动生成桶文件,其中在文件中包含一行 export * from './'
。这导致了错误。
git bisect
查找引入错误的提交。幸运的是,提交量很小,所以并不太难
我知道这不是“如何调试诸如...之类的错误”问题的直接答案,但希望它可以帮助任何在调试此错误时遇到此线程的人。