creator3.6,ts脚本报错之后无限循环卡死,真机模拟器必现

目的:想接入bugly,上报ts脚本的错误信息,
测试代码:
let a = null
console.log(“aaaaaaaaaaaaaa::” + a.length)
捕获错误的代码:
globalThis.onerror = (event, source, lineno, colno, error)=>{
console.log(“globalThis.onerror:” + event + “, source:” + source + “, lineno:” + lineno + “, colno:” + colno + “, error:” + error)
}
浏览器报错:
image
目前是:
浏览器测试:正常,如上图,就报错一次。
手机或者模拟器(如雷电):无限循环,卡死。。。
导致无法执行到globalThis.onerror的回调中,所以也就无法调用原生把错误上报到bugly,查看了论坛的很多类似问题,都没有找到合适解决方案,好像从2.x版本就一直存在这个问题,话说可以通过try catch去捕获异常,但是难免还是有遗漏。这个请问要如何解决。
不知道接入bugly又是如何上报错误上去的??

推荐接入 KSCrash,Bugly 我已放弃。

这个应该和接入的sdk是哪个平台没有关系吧,本质是ts脚本报错会卡帧的问题

有没有一种可能
native的v8有接口error回调
c++ => java => bugly就行了呢

正解。。。
说明你代码运行有bug。。
想要只报一次。。得去修改引擎源码
让其不卡帧,继续运行

这一点让cocos-lua转到creator的人非常抓狂。。动不动就卡死。。

遇到过无解,渲染异常直接卡死游戏,就算能跳到下一帧也是继续卡死,最后还是抓日志修了这个异常才解决的。

c++那边的有捕获错误的:


可以在这里调用java的接口去上报给bugly,但是还是卡帧死循环 :rofl:

脚本出错本就应该卡住的,你的程序设计要具有完整性,在出错的地方可以try catch

以前用cocos-lua,是lua脚本报错,只会跳过当前帧,不影响用户继续体验游戏,而不是直接给卡住的,因为存在允许一些错误的存在。程序设计肯定是要有完整性,但是是人就会犯错,这是无法避免的,我们是站在用户的角度去思考这个问题。

有没有一种可能
native重写了setTimeout的实现 没有承接住cc._throw抛出的异常呢

时间来到23年了,真机报错卡死有解决方案了么,一直卡死闪屏

2025年了,这个问题似乎无解。一个大工程里不可能到处try catch,大部分是无关紧要小bug,1.9的工程里跑的好好的,不敢升级引擎。