目的:使用addr2line對庫中的崩潰定位到具體的代碼行
步驟:
1.獲取崩潰產生的記錄堆棧信息的墓碑文件tombstone
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'alps/full_nb6797_6c_m/nb6797_6c_m:6.0/MRA58K/1583238338:user/test-keys'
Revision: '0'
ABI: 'arm'
pid: 19790, tid: 20058, name: (START_ROUTINE) >>> com.hikvision.voicelib <<<
signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xf371ae1c
r0 00000001 r1 e8771a40 r2 7fff485e r3 7fff485e
r4 f383c203 r5 de5bf930 r6 eed63dc8 r7 e902e4a0
r8 f387c898 r9 00000000 sl de57f000 fp de5bf888
ip de5bea68 sp de5bf7a0 lr f75b6861 pc f371ae1c cpsr 600f0010
d0 0000000000000000 d1 6966207369206469
d2 535b5d7070632e73 d3 6e61725474726168
d4 726874505b5d7070 d5 727474615f646165
d6 636174737465735f d7 30342c657a69736b
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0000000000000000 d17 0000000000000000
d18 0000000000000000 d19 3ff0000000000000
d20 40083e0f83e0f83e d21 0000000000000000
d22 0000000000000000 d23 0000000000000000
d24 00000000c7de0000 d25 0000000000000000
d26 0000000000000000 d27 0000000000000000
d28 000000000000c7de d29 0000000000000000
d30 000000000000c7de d31 0000000000000000
scr 20000010
backtrace:
#00 pc 001d7e1c /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN13C_TransClient17StartTransSessionEv+464)
#01 pc 001ddd54 /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN16C_AudioServerMng17CreateTransClientEv+104)
#02 pc 001ddc80 /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so (_ZN16C_AudioServerMng22CreateTransClientShellEPv+28)
#03 pc 001e44c8 /data/app/com.hikvision.voicelib-2/lib/arm/libaudioaiadapt.so
#04 pc 0004078b /system/lib/libc.so (_ZL15__pthread_startPv+30)
#05 pc 0001a031 /system/lib/libc.so (__start_thread+6)
stack:
de5bf760 00000000
de5bf764 00000000
de5bf768 00000000
de5bf76c 00000000...
2.找到NDK中工具,我的路徑是:C:\Users\sylv\AppData\Local\Android\Sdk\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe
3.使用工具分析出現問題的庫文件,可從堆棧信息中看到是libaudioaiadapt.so出現了問題,對應的地址爲001ddc80,那麼輸入命令C:\Users\sylv\AppData\Local\Android\Sdk\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe -C -f -e D:\00AndroidStudioProject\SVN\Tool\Viocelib\voicesdk\src\main\jniLibs\armeabi-v7a\libaudioaiadapt.so 001ddc80
對應輸出:
參數說明:
參數
-a --addresses:在函數名、文件和行號信息之前,顯示地址,以十六進制形式。
-b --target=<bfdname>:指定目標文件的格式爲bfdname。
-e --exe=<executable>:指定需要轉換地址的可執行文件名。
-i --inlines : 如果需要轉換的地址是一個內聯函數,則輸出的信息包括其最近範圍內的一個非內聯函數的信息。
-j --section=<name>:給出的地址代表指定section的偏移,而非絕對地址。
-p --pretty-print:使得該函數的輸出信息更加人性化:每一個地址的信息佔一行。
-s --basenames:僅僅顯示每個文件名的基址(即不顯示文件的具體路徑,只顯示文件名)。
-f --functions:在顯示文件名、行號輸出信息的同時顯示函數名信息。
-C --demangle[=style]:將低級別的符號名解碼爲用戶級別的名字。
-h --help:輸出幫助信息。
-v --version:輸出版本號。