cocos creator v3.5.2
原生通过__errorHandler捕捉js/ts层错误后
想要弹出个弹框
但是报错以后加载弹框无法加载 整个界面都动不了 请问您们是怎么解决的

主动抛出报错 然后界面完全动弹不得 请问是什么原因
有人知道吗
你有试试最新的 3.8.3 吗。我测试了一下,是能够正常的在异常回调中显示 ui 的。
(window as any).__errorHandler = function (name, line, msg, stack) {
console.log(`name: ${name}`);
console.log(`line: ${line}`);
console.log(`msg: ${msg}`);
console.log(`stack: ${stack}`);
myMsgLabel.active = true;
myMsgLabel.getComponent(Label).string = '你好出错啦。。。。';
};

我的引擎版本是v3.5.2的 您好
移动端原生是可以通过__errorHandler捕获js/ts的错误的,是吗
有没有引擎工作人员告知一下 可以提供demo
这样子的报错貌似捕获不到呢
3.8.3 有修复过一个关于捕获不到异常的问题:
如果你们不是用 3.8.3 引擎,可以考虑按照 PR 手动修改一下代码,再试试看。
__errorHandler 应该是早期的方式。功能上是与 jsb.onError 一样的。小区别是:
- __errorHandler 是全局变量,直接赋值:
__errorHandler = function(name, line, msg, stack) {...};
- jsb.onError 是接收一个函数作为参数:
jsb.onError(function (location, message, stack) {
console.error(location, message, stack);
});
报错以后 界面完全动弹不得是什么原因
我这边是测试点击按钮的回调里面主动throw错误
错误是捕捉到了 在 _errorHandler回调里面进行弹窗也是执行完了
但是就是见不到弹窗 而且界面卡死
界面卡死 是因为报错了呀 后面不执行了 不知道你的界面管理是怎么设计的 如果是同步就要遭 用异步的试试
异步的 已经执行完毕了 但是弹窗出不来 层级也是最高的
而且这个我是自己测试报错
点击测试按钮 throw错误
捕捉成功了的
我觉得你应该try你的错误层 存起来(比如50条) 通过其他方式打开你的errorView界面(在某个地方点击20下)
看了下源码,功能好像不一样。
__errorHandler 只捕捉部分错误(onMessageCallback),jsb.onError 能捕捉下面所有的错误。
ScriptEngine.cpp
_isolate->SetCaptureStackTraceForUncaughtExceptions(true, JSB_STACK_FRAME_LIMIT, v8::StackTrace::kOverview);
_isolate->SetFatalErrorHandler(onFatalErrorCallback);
_isolate->SetOOMErrorHandler(onOOMErrorCallback);
_isolate->AddMessageListener(onMessageCallback); // <- __errorHandler
_isolate->SetPromiseRejectCallback(onPromiseRejectCallback);
嗯,看了代码是如你说的情况。
这块代码年代有点久远,最早实现的时候是只有 __errorHandler 的。是需要重新缕缕。
就是想问一下 报错以后 界面完全动弹不得 这个怎么处理 没有陷入死循环
之前2.x版本没问题的 我现在的3.5.2必现