Android程序crash log解析
阿新 • • 發佈:2018-11-10
Android程序crash會導致比較嚴重的問題, 輕則程序相關功能無法使用, 重則導致系統crash。
抓取對應的log和tombstone,會發現crash時列印的是一串地址棧,而不是對應的函式呼叫棧。
要解決問題,首要問題是把地址棧解析為對應的函式呼叫棧。
1. addr2line
cd prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/
[addr2line or ./aarch64-linux-android-addr2line] -f -e [對應的符號表/二進位制程式/so檔案] [log中地址]
需要注意的是不能直接使用out/target/product/XXX/system/lib/xx.so,會出現執行上面命令之後顯示
??
??:0
因為這個動態庫是最後要打包到最後生成的system.ing中的,所以它不包含除錯符號資訊.
而要使用out/target/product/XXX/symbols/system/lib/xx.so
2. stack
stack是/development/scripts/下的python指令碼,會呼叫其他一些py指令碼,最終呼叫addr2line。
在對應的程式碼目錄下執行“stack”。
如:
~/LINUX/android: stack tombstone_log/logcat_log [> file]
stack會自動使用對應的工具和編譯出的符號表去解析log。
如果無法執行stack, 需要先配置下環境:
source build/envsetup.sh
lunch [platform]
stack ...