我的引擎版本是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必现
是指修改input.ts吗
Object.cpp的文件我的3.5.2对比了一下不需要修改
我不是捕获不到异常 我是捕获以后 界面就卡死了
但是websocket收发消息正常 也没有陷入死循环
麻烦提供个复现问题的最小 Demo 吧。