(Android TV) 项目中微信无法启动bug分析

项目中报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函数的实现有问题,调用了错误的函数导致的。 

你可能感兴趣的:((Android TV) 项目中微信无法启动bug分析)