本文只适应于Android系统级别的开发,记录一下,没有源码不行。
异常日志如下:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'LeEco/LeMax2_CN/le_x2:6.0.1/FEXCNFN5902012151S/LE_X820_STATIONARY:user/release-keys'
Revision: '0'
ABI: 'arm64'
pid: 14501, tid: 14554, name: Thread-8804 >>> com.letv.android.filemanager <<<
signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0x7f6d723514
x0 0000000000000001 x1 0000007f6c7c6820 x2 0000007f6b586948 x3 0000000000000001
x4 0000007f6b586950 x5 0000000000000000 x6 0000000000000001 x7 0000000000000001
x8 0000007f8ba56f20 x9 00000000ffffffff x10 0000000000000001 x11 00000000d000000d
x12 0000000000003800 x13 0000007f8bbdc000 x14 0000007f6c63b7e0 x15 0000000000000001
x16 0000007f8bf56e00 x17 0000007f8bf39cbc x18 0000000000000004 x19 0000007f6c63b7e0
x20 0000000000000000 x21 0000007f6c63b7e0 x22 00000000000d1be0 x23 0000000000000000
x24 0000007f87437600 x25 0000000000000000 x26 0000007f6c63b818 x27 0000007f6d723510
x28 0000000012e72580 x29 0000007f6b5868d0 x30 0000007f8ba62f1c
sp 0000007f6b5868d0 pc 0000007f8ba62f28 pstate 0000000060000000
v0 a7e88583e680bfe69ca4e5b1b7e62f6b v1 000000000000003a6b70612e91a2e986
v2 2f302f646574616c756d652f65676172 v3 70612f79654b72657473614d69666957
v4 00000000000000000000000000000000 v5 00000000000000000000000000000000
v6 00000000000000000000000000000000 v7 e680bfe69ca4e5b1b7e62f6b70612f79
v8 00000000000000000000007f6b5873a8 v9 00000000000000000000007f87093f18
v10 00000000000000000000007fdc2cfd60 v11 00000000000000000000007fdc2cff48
v12 0000000000000000000000556dc322b8 v13 00000000000000000000007fdc2d00e8
v14 00000000000000000000000000000004 v15 00000000000000000000000000000000
v16 40100401401004014010040140100401 v17 a00a000080081000aa008810aaaaa800
v18 80200802000000008000080000100000 v19 000000000000000000000000ebad8083
v20 12e993a012e9937012e9934012e8efd0 v21 000000000000000000000000ebad8085
v22 000000000000000000000000ebad8086 v23 000000000000000000000000ebad8087
v24 00000000000000000000000000000564 v25 00000000000000000000000000000000
v26 0000000000000000ffffffffffffffff v27 000000000000000000000000ebad808b
v28 000000000000000000000000ebad808c v29 000000000000000000000000ebad808d
v30 000000000000000000000000ebad808e v31 000000000000000000000000ebad808f
fpsr 00000010 fpcr 00000000
backtrace:
#00 pc 0000000000026f28 /system/lib64/libandroidfw.so (_ZN7android8ResTable11addInternalEPKvmS2_mib+192)
#01 pc 0000000000019424 /system/lib64/libandroidfw.so (_ZNK7android12AssetManager20appendPathToResTableERKNS0_10asset_pathEPm+592)
#02 pc 0000000000019a44 /system/lib64/libandroidfw.so (_ZNK7android12AssetManager11getResTableEb+216)
#03 pc 00000000000db988 /system/lib64/libandroid_runtime.so
#04 pc 000000000222049c /system/framework/arm64/boot.oat (offset 0x2219000)
出错的调用栈是backtrace下面几行,第三列的长串数字对应的出错地址:
#00 pc 0000000000026f28 /system/lib64/libandroidfw.so (_ZN7android8ResTable11addInternalEPKvmS2_mib+192)
#01 pc 0000000000019424 /system/lib64/libandroidfw.so (_ZNK7android12AssetManager20appendPathToResTableERKNS0_10asset_pathEPm+592)
#02 pc 0000000000019a44 /system/lib64/libandroidfw.so (_ZNK7android12AssetManager11getResTableEb+216)
#03 pc 00000000000db988 /system/lib64/libandroid_runtime.so
#04 pc 000000000222049c /system/framework/arm64/boot.oat (offset 0x2219000)
然后进入Android源码out/target/product/phone_name/下面执行如下命令:
aarch64-linux-android-addr2line -fC -e symbols/system/lib64/libandroidfw.so 0000000000019a44
aarch64-linux-android-addr2line -fC -e symbols/system/lib64/libandroidfw.so 0000000000019424
aarch64-linux-android-addr2line -fC -e symbols/system/lib64/libandroidfw.so 0000000000026f28
即可看到对应源文件的出错位置,aarch64-linux-android-addr2line工具顾名思义就是addr to line(地址转换成代码行)三条命令的执行结果分别如下,调用顺序从上到下:
android::AssetManager::getResTable(bool) const
/home/letv/jenkins_slave/workspace/X2-SHIPPING-DB-WNETCOM/Android/frameworks/base/libs/androidfw/AssetManager.cpp:738 (discriminator 1)
android::AssetManager::appendPathToResTable(android::AssetManager::asset_path const&, unsigned long*) const
/home/letv/jenkins_slave/workspace/X2-SHIPPING-DB-WNETCOM/Android/frameworks/base/libs/androidfw/AssetManager.cpp:689
android::ResTable::addInternal(void const*, unsigned long, void const*, unsigned long, int, bool)
/home/letv/jenkins_slave/workspace/X2-SHIPPING-DB-WNETCOM/Android/frameworks/base/libs/androidfw/ResourceTypes.cpp:3728