__errorHandler函数
cocos在js-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"
}
上传后可以在后台管理界面查看