cocos-js,错误输出台
一、为什么要做这么一个错误输出台?事发起因:
事发分析: 事发总结: 二、手动起来因为cocos-js底层是通过spidermonkey提供对js的支持,所以就去查看一下spidermonkey,对于蜘蛛猴的介绍和使用,网上有很多资料,最近我也是在学习这块资料, JS_SetErrorReporter(_cx,ScriptingCore::reportError); 这么一行代码,网上查了下,确实是错误输出的地方,然后进到reportError这个方法中, void ScriptingCore::reportError(JSContext *cx,const char *message,JSErrorReport *report) { //-----------------------------wade-----------------------------// js_log("▄︻┻═┳一 龙︻▆▇◤ ︻Q▅▆▇◤ ︻1▅▆▇◤ ︻ф▅▅▆▇◤ o︻0▅▆▇◤ v︻▅▆▇◤"); char* __log = (char *)calloc(sizeof(char),MAX_LOG_LENGTH+1); sprintf(__log,"file--->%s ||| line--->%u ||| info--->%s",report->filename ? report->filename : "<no filename="filename">",(unsigned int) report->lineno,message); js_log(__log); js_log("▄︻┻═┳一 ︻7▅▆▇◤ ︻╃▅▆▇◤ ━━━X▅▆▇◤ ︻AS▅▆▇◤ s︻b▅▆▇◤ ︻v▅▆▇◤"); //取消掉JS出错的异常(!这句如果不调用,那么,下面C++调用JS的时候会一直报之前的异常,引发递归问题) JS_ClearPendingException(cx); //c++调用js代码,在js中定义了gReportError这么个方法,出错的时候会调用,并传参__log char* char_content = (char *)calloc(sizeof(char),MAX_LOG_LENGTH+1); sprintf(char_content,"gReportError('%s')",__log); ScriptingCore::getInstance()->evalString(char_content,NULL); } 三、效果演示四、后期改善游戏中出错了,可以及时发现,但是只有在debug开关为true时才能呈现出来,而正式的上线包这个开关是false的,所以当玩家发现错误的时候还是不能及时发现,还是需要程序模拟线上环境,然后发现问题,才能解决问题。 我们就想这个开关能不能手动打开,所以就想到了输入框,当我们在输入框中输入一段特殊的口令时,这时dubug开关就打开,然后就可以查看错误了,我们想到了我们的激活码输入框,这样我们的错误输出台就算在线上正式环境上也可以显示出来啦! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |