1. 程式人生 > >Android程序crash log解析

Android程序crash log解析

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 ...