android平台有办法捕获到全局未处理的promise异常吗?

  • Creator 版本: 3.3.2

  • 目标平台: Android

期望捕获到全局未处理的promise异常,上报错误信息。

经测试web平台可以通过监听unhandledrejection事件,捕获未处理的promise内异常或reject。

但是在android平台,未成功捕获到相关事件。
查询到V8有 SetPromiseRejectCallback方法,但是不知道应该如何使用。

有没有可行的办法,求指点求分享~

请问下其他普通js的异常有接口捕获吗

web平台 onerror
native平台 __errorHandler

        window.onerror = (message, source, lineno, colno, error) => {
            cc.log('window.onerror', message, source, lineno, colno, error)
        }
        window.addEventListener("unhandledrejection", function (promiseRejectionEvent) {
            cc.log('unhandled rejection', promiseRejectionEvent)
        });

不过没有堆栈信息, 所以用处不大, 有没有可以打印堆栈信息的方法?

自己重写一下Promise.reject,在里面调用一下__errorHandler(reason)

测试一下,web平台上这两个事件监听都有stack信息的。
相关的帖子,__errorHandler这个回调捕获的信息好像不直观

web平台 onerror 测试发现有些异常捕获不到

onLoad(){
window.onerror = (message, source, lineno, colno, error) => {
console.log(‘window.onerror’, message, source, lineno, colno, error)
}
}

//这个捕获不到异常
start() {
    console.log("------------>")
    var a;
    a.b.m = 5;
}

//通过点击触发,这个可以捕获到
onClick(){
    console.log("------------>")
    var a;
    a.b.m = 5;
}

这问题貌似之前论坛也有人反馈过,感觉不是很影响。

我在2.4用的是这个
jsb[‘onError’]((location, message, stack)=>{
});
不知道3.x有没有效果

2赞

@jare 能解释一下吗? 2.x和3.x的处理方式不同的问题 这个错误处理对开发很重要, js运行期错误很容易, 如果有对应的堆栈信息对开发帮助很大

2024年了,原生Android还是无法得到可读的unhandledrejection信息

image
image

2赞