问题现象
出现Failed to execute es2abc. 但是没有具体的错误日志,难以对问题进行定位以及原因分析。
问题场景
场景:开发者在源码中使用大量深度嵌套的代码,比如几百层的if-else,as转换,括号嵌套等,在编译的时候由于递归调用导致超出栈容量上限,引发es2abc的闪退,并且没有相关的错误日志。
定位方案
在windows上,可以打开事件管理器,Windows日志,应用程序,找到对应的时间,如果能找到es2abc.exe的崩溃日志,同时异常代码为 0xc00000fd, 那么表示该编译由于爆栈导致崩溃。
在mac上,可以进入控制台,点击崩溃报告,找到es2abc,双击查看崩溃日志。
如果出现下图中所示,调用栈出现大量反复的调用相同的函数,那么极有可能是出现了大量递归导致爆栈。
解决措施
排查代码中有无大量重复嵌套的场景,比如几百层if-else,as转换,括号嵌套等,对其进行拆分或者优化。
问题代码示例
包括但不限于以下问题场景
if (condition) {
if (condition) {
if (condition) {
if (condition) {
if (condition) {
if (condition) {
...
}
}
}
}
}
}
[
[
[
[
[
[
[
[
...
]
]
]
]
]
]
]
]
!!!!!!!!!!
!!!!!!!!!!
...
!!!!!a
var a = 1
a as Int as Int as Int as Int as Int ...