iOS下如何使用window.__errorHandler来捕获错误?

现在已经在main.js添加window.__errorHandler函数,但是好像没有被调用, 请指教?

1赞

一样的问题 ,没有回调.在cpp层已经打印了报错.

已经解决,需要将函数放到下面位置:point_down:

3赞

ccc1.6.1
iOS在main.js这个位置加了__errorHandler但是不管用,可能是什么原因呢?

你是如何确定没有用的, 我加了之后打印日志没有输出, 也以为没有用, 但是函数确实调用到了, 可能是这个时候日志还没有初始化吧.

上传错误日志的api没有被调用。

还需要额外设置什么吗?

不需要做任何设置. 其实这个也不一定要加到 main.js 中, 任何位置都可以. 你没有收到有没有可能是: 收到后调用 上传错误日志 api 是发生了异常.

    window.__errorHandler = function(file, line, msg, error) {
        // cc.log("window:onError:", file, line, msg, error);
        Crash.CrashReportingHelper.sendException({file: file, line: line, msg: msg, error: error}, "BuglyHelper");
    }

我们是在游戏的主场景的 onLoad 中调用的, 注意 cc.log 是没有用的. 建议你可以在这个函数中做一些能够明显观察到的改动, 比如修改 界面上的一个文字.

另外, 你是在什么环境下测试的? web 端吗? 这个好像只有原生环境下才有用.

确定可以不用放在main.js中吗?请问你的ccc版本号?

其他人没有我这样的问题吗?别沉了啊。。。

非常肯定可以, 我 bugly 后台已经收到无数条 js exception 了, 版本号: 1.6.2.

你仔细描述下是如何修改的代码, 如何做的测试. 再把代码贴一下, 我帮你分析下. 大家都是用 __errorHandler 来收集错误的, 不可能只有你有这个问题.

我这里版本号是1.6.1
下面代码写在大厅的场景的onLoad里,然后通过点击某个按钮触发错误,比如调用一个不存在的方法。
window.__errorHandler = function (file, line, error) { //尝试过打印log, 无效 //尝试过发送http请求, 无效 //尝试过修改当前场景的某个元素比如设置label的string, 无效 }
在Xcode和Android Studio中都输出了相关的JS Exception, 但是就是没走到errorHandler这里,
不知道还需要额外设置什么,还是说这种错误不能被捕获?我也尝试过将errorHandler写在main.js中,还是无效

是否存在错误等级的概念?或者说项目build的时候需要额外勾选什么吗?麻烦了!

这样, 我搞了一个最小化的测试项目, 你导入后用模拟器运行起来, 上面有一个按钮, 点完就会触发一个错误, 我在错误监听中修改了界面上的 label:

TestError.zip (550.6 KB)

你导入试一下.

运行效果应该是这个样子的:

注意, 为了能够在 __errorHandler 到 HelloWorld 的成员变量, 函数最后需要 bind(this), 不然会触发递归错误, 导致模拟器崩溃.

    window.__errorHandler = function(file, line, msg, error) {
        // cc.log("window:onError:", file, line, msg, error);
        // Crash.CrashReportingHelper.sendException({file: file, line: line, msg: msg, error: error}, "BuglyHelper");
        this.label.string = error;
    }.bind(this);

nothing happened…

这样话, 你下载一个 1.6.2 试一下?

:joy:

安卓和IOS上,代码被加密混淆了,行号不对,怎么能获得准确的行号