项目中报bug,点击微信无法启动, 而我们这边是可以正常打开的。 一般不容易解的就是这种不容易复现的问提了。
1. 先看QA提供的log, 看看有没有什么发现。
抽取部分内容:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'TCL/full_mst818/mst818:4.2.2/JDQ39E/01.00.00:userdebug/test-keys'
Revision: '32'
pid: 6654, tid: 6671, name: Thread-442 >>> com.tcl.weixin <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d
r0 00000000 r1 00000000 r2 deadd00d r3 00000000
r4 40d671b0 r5 0000020c r6 00000001 r7 00000001
r8 41333ba8 r9 00000000 sl 5197b7b0 fp 00000000
ip 00004000 sp 5ff39a48 lr 401c5129 pc 40cfece0 cpsr 60000030
d0 74726f6261204d56 d1 74706d657474616e
d2 5712d1985712d175 d3 5712d2085712d16c
d4 004d006500630069 d5 00670061006e0061
d6 0000000000720065 d7 6e694c6e00000014
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0000000000009fff d17 ffffffffffffffff
d18 0000000000009001 d19 0000000000000000
d20 3fc554e7eb0eb47c d21 3e66376972bea4d0
d22 3f4de16b9c24a98f d23 3fb0f4a31edab38b
d24 3fede16b9c24a98f d25 3fe55559ee5e69f9
d26 0000000000000000 d27 0000000000000000
d28 0000000000000005 d29 0000000000000000
d30 0000000000000000 d31 0000000000000000
scr 60000010
backtrace:
#00 pc 00045ce0 /system/lib/libdvm.so (dvmAbort+75)
#01 pc 000285ec /system/lib/libdvm.so (IndirectRefTable::get(void*) const+336)
#02 pc 0004a243 /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+30)
#03 pc 0004d485 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+432)
#04 pc 000276a0 /system/lib/libdvm.so
#05 pc 0002b5cc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#06 pc 0005fc81 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
#07 pc 0005fcab /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
#08 pc 00054827 /system/lib/libdvm.so
#09 pc 0000e3d8 /system/lib/libc.so (__thread_entry+72)
#10 pc 0000dac4 /system/lib/libc.so (pthread_create+160)
stack:
5ff39a08 00000001
5ff39a0c 401f3408
5ff39a10 401f3408
5ff39a14 401f3408
5ff39a18 401f3408
5ff39a1c 401c5129 /system/lib/libc.so (__sflush_locked+36)
5ff39a20 401f0210 /system/lib/libc.so
5ff39a24 401f3408
5ff39a28 00000000
5ff39a2c 401c60f9 /system/lib/libc.so (_fwalk+32)
5ff39a30 40d671b0 /system/lib/libdvm.so
5ff39a34 0000020c
5ff39a38 00000001
5ff39a3c 00000001
5ff39a40 df0027ad
5ff39a44 00000000
#00 5ff39a48 412e5810 /dev/ashmem/dalvik-heap (deleted)
5ff39a4c 6c756e28
5ff39a50 0000296c
5ff39a54 00000000
5ff39a58 00000000
5ff39a5c 00000000
5ff39a60 00000000
5ff39a64 00000000
5ff39a68 00000000
5ff39a6c 00000000
5ff39a70 00000000
5ff39a74 00000000
5ff39a78 00000000
5ff39a7c 00000000
5ff39a80 00000000
5ff39a84 00000000
........ ........
#01 5ff39c60 00000001
5ff39c64 5c812d89 /system/lib/libchannelmanager_jni.so (com_mstar_android_tvapi_dtv_common_ChannelManager_native_getProgramInfoById(_JNIEnv*, _jobject*, _jobject*, _jobject*)+16)
5ff39c68 5c814b87 /system/lib/libchannelmanager_jni.so
5ff39c6c 5c804f20
5ff39c70 5c804f20
5ff39c74 57419538 /dev/ashmem/dalvik-LinearAlloc (deleted)
5ff39c78 5197b7a0
5ff39c7c 40d03247 /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+34)
#02 5ff39c80 57419538 /dev/ashmem/dalvik-LinearAlloc (deleted)
5ff39c84 5197b7a0
5ff39c88 5c804ee4
5ff39c8c 40d06489 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+436)
#03 5ff39c90 5c804ee4
5ff39c94 59904b7c /data/dalvik-cache/system@framework@com.mstar.android.jar@classes.dex
5ff39c98 5c812d79 /system/lib/libchannelmanager_jni.so (com_mstar_android_tvapi_dtv_common_ChannelManager_native_getProgramInfoById(_JNIEnv*, _jobject*, _jobject*, _jobject*))
5ff39c9c 5197b7b0
5ff39ca0 00000000
5ff39ca4 00000000
5ff39ca8 00000010
5ff39cac 401f3228
5ff39cb0 41334a78 /dev/ashmem/dalvik-heap (deleted)
5ff39cb4 41334a78 /dev/ashmem/dalvik-heap (deleted)
5ff39cb8 5197bb0c
5ff39cbc 41334a78 /dev/ashmem/dalvik-heap (deleted)
5ff39cc0 00000003
5ff39cc4 5197b7a0
5ff39cc8 41334a78 /dev/ashmem/dalvik-heap (deleted)
5ff39ccc 41334a78 /dev/ashmem/dalvik-heap (deleted)
........ ........
原来是调用so库的时候挂了, 看log中黑底绿字的部分, /system/lib/libchannelmanager_jni.so, 调用channal模块的时候挂了, 想到我们这边是没有搜索过频道的,而QA很可能做过频道相关的测试, 再加上QA之前说过恢复出厂设置后,就ok了。这就对了,恢复出厂设置会清空数据,很有可能把频道相关数据清空,那样就不会出现bug了。 为了验证想法,把模拟DTV信号的设备接入电视,搜台, 点击微信, bug复现了! 对于一个不是必现的bug, 能够找到复现bug的条件就已经成功一半了。
2. 继续查看log,看黑底红字的log, com_mstar_android_tvapi_dtv_common_ChannelManager_native_getProgramInfoById, 是调用jni中函数名为com_mstar_android_tvapi_dtv_common_ChannelManager_native_getProgramInfoById的石猴挂掉了。 通过一层层的调用关系寻找,终于找到是我们的代码中getChannelList的函数里调用的, 最终原因是由于我们的getChanelList函数的实现有问题,调用了错误的函数导致的。