Google Breakpad是Google開發的一個跨平臺異常捕獲和dump文件生成的開發庫。利用這個庫可以在Windows, Mac, Linux, iOS, Android平臺上對C/C++程序異常崩潰進行捕獲,并生成dump文件供后期調試。
breakpad包含三個模塊
- client
client用戶手機崩潰的時候,client收集信息寫入特定格式的崩潰信息 - dump_syms
dump_syms用于從strip前的so庫抽取出調試符號保存到syms符號文件中 - minidump_stackwalk
利用minidump_stackwalk,從syms符號文件和包含崩潰信息的dmp文件提取出完整的崩潰調用堆棧
breakpad使用
編譯
1、獲取breakpad源碼
git clone https://github.com/google/breakpad.git
2、 進入到Breakpad的下載目錄,創建mac目錄
3、指定編譯目錄(-prefix 需要指定絕對路徑),開始編譯
*** 換成自己的絕對路徑
./configure -prefix=***/breakpad/mac/
make
4、編譯完成后,可以在mac目錄下看到編譯后的產物,
minidump_stackwalk 文件,用來根據 minidump 文件生成堆棧跟蹤log
libbreakpad.a文件,可以直接集成在client里面
dump_syms工具在src/tools下面, mac平臺需要xcode工程打開對應目錄工程編譯
最新代碼可能編譯不通過,可參考:
https://groups.google.com/g/google-breakpad-discuss/c/fierVnIAv1M
- 在linux平臺編譯生成的dump_syms 僅能在linux平臺運行 ,解析 linux上運行的so符號信息
- 在mac平臺編譯生成的dump_syms 僅能在mac平臺運行 ,解析mac上運行的so符號信息
- 在windows平臺編譯生成的dump_syms 僅能在windows平臺運行 ,解析windows上運行的so符號信息
故如果是調試Android設備,需要在linux設備上編譯dump_syms
如果使用mac上編譯的dump_syms提取android native的so 會出現以下提示
file is neither a fat binary file nor a Mach-O object file
在mac上執行 linux編譯的dump_syms提取android native的so 會出現以下提示
zsh: exec format error: dump_syms
使用方法一
- 使用dump_syms生成符號表: ./dump_syms ~/Test/Caputre > Capture.syms
- 創建symbol files專有目錄結構:
head -n1 Capture.syms //查看層次文件,得到./symbols/PanoramaCapture/3EXXXXX/
mkdir -p ./symbols/PanoramaCapture/3EXXXXXX/ - 將符號文件移動進去 mv Capture.syms ./symbols/PanoramaCapture/3EXXXXX/
- 利用minidump_stackwalk分析dump文件: ./minidump_stackwalk minidump.dmp ./symbols
得到詳細的堆棧信息
使用方法二
在mac上面調試Android native崩潰時,mac無法生成linux的dump_syms
但是minidump_stackwalk提取dump文件的堆棧信息不受影響,故可以采用minidump_stackwalk + add2line結合的方式
- 生成堆棧信息 ./minidump_stackwalk minidump.dmp > stack.txt
得到以下信息
- 使用add2line 生成對應類、函數位置
aarch64-linux-android-addr2line -C -f -e libtest.so 0x335418
參考鏈接:
https://wenku.baidu.com/view/02de4975322b3169a45177232f60ddccda38e662.html