libcocos2djs.so内的crash问题

  • Creator 版本:2.0.10

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:
    09-10 17:00:48.851 E//system/bin/tombstoned( 754): Tombstone written to: /data/tombstones//tombstone_08
    09-10 17:00:48.852 I/am_crash( 1162): [1162,0,com.yunbu.puppyblast.iapppay,950582852,Native crash,Segmentation fault,unknown,0]
    09-10 17:00:48.854 W/Monkey (29653): // CRASH: com.yunbu.puppyblast.iapppay (pid 29669)
    09-10 17:00:48.854 W/Monkey (29653): // Short Msg: Native crash
    09-10 17:00:48.854 W/Monkey (29653): // Long Msg: Native crash: Segmentation fault
    09-10 17:00:48.855 W/Monkey (29653): // Build Label: HONOR/BND-AL10/HWBND-H:8.0.0/HONORBND-AL10/368(C00):user/release-keys
    09-10 17:00:48.855 W/Monkey (29653): // Build Changelist: 368(C00)
    09-10 17:00:48.855 W/Monkey (29653): // Build Time: 1551697420000
    09-10 17:00:48.855 W/Monkey (29653): // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    09-10 17:00:48.855 W/Monkey (29653): // Build fingerprint: ‘HONOR/BND-AL10/HWBND-H:8.0.0/HONORBND-AL10/368(C00):user/release-keys’
    09-10 17:00:48.855 W/Monkey (29653): // Revision: ‘0’
    09-10 17:00:48.855 W/Monkey (29653): // ABI: ‘arm’
    09-10 17:00:48.855 W/Monkey (29653): // pid: 29669, tid: 29837, name: GLThread 12888 >>> com.yunbu.puppyblast.iapppay <<<
    09-10 17:00:48.855 W/Monkey (29653): // signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xf94
    09-10 17:00:48.855 W/Monkey (29653): // Cause: null pointer dereference
    09-10 17:00:48.855 W/Monkey (29653): // r0 00000000 r1 00000000 r2 bd16faf8 r3 00000000
    09-10 17:00:48.855 W/Monkey (29653): // r4 00000000 r5 bd16fab0 r6 00000000 r7 bc97bf47
    09-10 17:00:48.855 W/Monkey (29653): // r8 e9ffc2c0 r9 e9ffc2c0 sl 00000000 fp bd16fad8
    09-10 17:00:48.855 W/Monkey (29653): // ip bcc0ee58 sp bd16fa90 lr bc45367d pc bc4536de cpsr 600d0030
    09-10 17:00:48.855 W/Monkey (29653): //
    09-10 17:00:48.855 W/Monkey (29653): // backtrace:
    09-10 17:00:48.855 W/Monkey (29653): // #00 pc 004f66de /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/lib/arm/libcocos2djs.so
    09-10 17:00:48.855 W/Monkey (29653): // #01 pc 004f6669 /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/lib/arm/libcocos2djs.so
    09-10 17:00:48.855 W/Monkey (29653): // #02 pc 0022a68c /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/lib/arm/libcocos2djs.so (_ZN2se6Object11getPropertyEPKcPNS_5ValueE+60)
    09-10 17:00:48.855 W/Monkey (29653): // #03 pc 00241190 /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/lib/arm/libcocos2djs.so
    09-10 17:00:48.855 W/Monkey (29653): // #04 pc 002414bc /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/lib/arm/libcocos2djs.so (Java_org_cocos2dx_lib_Cocos2dxEditBox_onKeyboardCompleteNative+92)
    09-10 17:00:48.855 W/Monkey (29653): // #05 pc 000ebfa1 /data/app/com.yunbu.puppyblast.iapppay-eLtC8CBToD6Cl-ugZalsug==/oat/arm/base.odex (offset 0x47000)
    09-10 17:00:48.855 W/Monkey (29653): //
    09-10 17:00:48.869 W/ActivityManager( 1162): Force finishing activity com.yunbu.puppyblast.iapppay/com.iapppay.openid.channel.ui.LoginActivity
    09-10 17:00:48.870 I/am_finish_activity( 1162): [0,41061662,10701,com.yunbu.puppyblast.iapppay/com.iapppay.openid.channel.ui.LoginActivity,force-crash]
    09-10 17:00:48.874 I/am_pause_activity( 1162): [0,41061662,com.yunbu.puppyblast.iapppay/com.iapppay.openid.channel.ui.LoginActivity]
    09-10 17:00:48.876 I/BootReceiver( 1162): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)
    09-10 17:00:48.882 W/ActivityManager( 1162): Force finishing activity com.yunbu.puppyblast.iapppay/org.cocos2dx.javascript.AppActivity
    09-10 17:00:48.882 I/am_finish_activity( 1162): [0,10362155,10701,com.yunbu.puppyblast.iapppay/org.cocos2dx.javascript.AppActivity,force-crash]

  • 重现方式:跑兼容性测试的时候,会有一批机器出现

  • 之前哪个版本是正常的 :

  • 手机型号 :华为 Ascend G7、vivo Y31、华为 荣耀畅玩 7X、vivo X9、华为 荣耀 7i

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:15%左右

  • 额外线索:

https://www.testin.cn/compatibilityReport/overview_v4.htm?taskid=tt99585b3eb7c93458c3016d1a5e9e9e
云测失败中的华为 Ascend G7、vivo Y31、华为 荣耀畅玩 7X、vivo X9、华为 荣耀 7i都是这个问题

Java_org_cocos2dx_lib_Cocos2dxEditBox_onKeyboardCompleteNative
看堆栈是这里调用的,不太能确定是什么问题

华为 荣耀 7i.zip (447.9 KB)
这是完整的日志

华为 Ascend G7.zip (110.5 KB)

这有一些不一样
(se::Object::getProperty(char const*, se::Value*)+60)出的问题

testin兼容性测试中的Mokey压力测试的时候几率出现的

这个可能不是运行过程崩溃,你看下testin的测试截图,或者拿真机测试下,有可能是关闭应用出现的,这类情况并不严重。

就是说有可能是杀掉游戏进程的时候出的吗

是的,有可能是程序退出没有处理好,导致的崩溃,你可以通过测试截图来判断。

我看了下17:00:37到17:00:48之间的日志
在17:00:42的时候出现
09-10 17:00:42.926 I/DEBUG ( 405): backtrace:
09-10 17:00:42.926 I/DEBUG ( 405): #00 pc 004f66de /data/app/com.yunbu.puppyblast.iapppay-1/lib/arm/libcocos2djs.so
09-10 17:00:42.926 I/DEBUG ( 405): #01 pc 004f6669 /data/app/com.yunbu.puppyblast.iapppay-1/lib/arm/libcocos2djs.so
09-10 17:00:42.926 I/DEBUG ( 405): #02 pc 0022a68c /data/app/com.yunbu.puppyblast.iapppay-1/lib/arm/libcocos2djs.so (_ZN2se6Object11getPropertyEPKcPNS_5ValueE+60)
09-10 17:00:42.926 I/DEBUG ( 405): #03 pc 00241190 /data/app/com.yunbu.puppyblast.iapppay-1/lib/arm/libcocos2djs.so
09-10 17:00:42.926 I/DEBUG ( 405): #04 pc 002414bc /data/app/com.yunbu.puppyblast.iapppay-1/lib/arm/libcocos2djs.so (Java_org_cocos2dx_lib_Cocos2dxEditBox_onKeyboardCompleteNative+92)
09-10 17:00:42.926 I/DEBUG ( 405): #05 pc 00926079 /data/dalvik-cache/arm/data@app@com.yunbu.puppyblast.iapppay-1@base.apk@classes.dex

然后在17:00:46出现Cocos2dxActivity的onCreate日志
09-10 17:00:46.666 D/Cocos2dxActivity(12200): Cocos2dxActivity onCreate: org.cocos2dx.javascript.AppActivity@3fa6f073, savedInstanceState: Bundle[mParcelledData.dataSize=392]

这个能说明程序已经crash然后被重新启动了吗

1赞

上一次Cocos2dxActivity的onCreate日志是这个时间点
09-10 16:59:52.286 D/Cocos2dxActivity(11297): Cocos2dxActivity onCreate: org.cocos2dx.javascript.AppActivity@11cf09c7, savedInstanceState: null

有空再看下吗。。

游戏有正常跑起来了吗?什么操作崩溃了的?

游戏能正常跑起来的,但是在monkey压测就可能会报那个错导致崩溃

根据上面的Monkey截图,初步怀疑出错流程是这样的
打开游戏的时候上层会先出现LoginActivity,这个Activity调起了键盘输入
在输入文字或者关闭虚拟键盘的时候,cocos2dxActivity内的onKeyboardComplete事件也接收到了
但是这个时候可能cocos2dxActivity没有完全初始化完成出现空指针引用导致crash

我在resources\cocos2d-x\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxEditBox.java类里的onKeyboardInput、onKeyboardComplete、onKeyboardConfirm这三个事件上加了个判断
如果cocos2dxActivity不是在最上层的话就return,不执行任何操作
加了判断后可以有效减少crash的次数
只是记录一下,供你们参考

顺带在记录一个问题
在oppo-a31这个机器上
由A activity切换到cocos2dxActivity这个Activity的时候,会必定崩溃
看日志是截图上的红框内的代码执行了,导致cocos2dxActivity直接被finish
暂时解决方法是把这段代码注释掉了

在app/AndroidManifest.xml里cocos2dxActivity增加这个属性android:taskAffinity
确实可以解决上面的finish问题,但是每次从主界面icon打开游戏,都会重新打开游戏进程