[cocos]异常捕获

1,927 阅读1分钟

__errorHandler函数

cocosjs-binding会调用全局的__errorHandler函数, 传入发生异常的文件路径, 行数, 错误信息以及调用栈, 类似window.onerror = function(message, source, lineno, colno, error) { ... }

            if (!_isErrorHandleWorking)
            {
                _isErrorHandleWorking = true;

                Value errorHandler;
                if (_globalObj->getProperty("__errorHandler", &errorHandler) && errorHandler.isObject() && errorHandler.toObject()->isFunction())
                {
                    ValueArray args;
                    args.push_back(Value(filePath));
                    args.push_back(Value(report->lineno));
                    args.push_back(Value(message));
                    args.push_back(Value(stack));
                    errorHandler.toObject()->call(args, _globalObj);
                }

                _isErrorHandleWorking = false;
            }
            else
            {
                SE_LOGE("ERROR: __errorHandler has exception\n");
            }

一个异常数据

模拟一个异常

	apmTest() {
		console.log('apmTest')
		const a: any = {}
		a.b.g = 0
	}

收集到的异常数据

{
	"filePath": "assets/main/index.js",
	"lineno": 0,
	"message": "Uncaught TypeError: Cannot set property 'g' of undefined",
	"stack":
		"[0]Helloworld.apmTest@assets/main/index.js:235\n[1]emit@src/cocos2d-jsb.js:25756\n[2]emitEvents@src/cocos2d-jsb.js:25739\n[3]_onTouchEnded@src/cocos2d-jsb.js:25333\n[4]252.proto.emit@src/cocos2d-jsb.js:41376\n[5]_doDispatchEvent@src/cocos2d-jsb.js:15143\n[6]dispatchEvent@src/cocos2d-jsb.js:16035\n[7]_touchEndHandler@src/cocos2d-jsb.js:15032\n[8]_onTouchEventCallback@src/cocos2d-jsb.js:32344\n[9]_dispatchEventToListeners@src/cocos2d-jsb.js:32430\n[10]_dispatchTouchEvent@src/cocos2d-jsb.js:32379\n[11]dispatchEvent@src/cocos2d-jsb.js:32631\n[12]handleTouchesEnd@src/cocos2d-jsb.js:39375\n[13]touchend@src/cocos2d-jsb.js:39578\n[14]anonymous@src/cocos2d-jsb.js:39591\n[15]dispatchEvent@jsb-adapter/jsb-builtin.js:3069\n[16]anonymous@jsb-adapter/jsb-builtin.js:3110"
}

上传后可以在后台管理界面查看