breakpad解析dump

Google Breakpad是Google開(kāi)發(fā)的一個(gè)跨平臺(tái)異常捕獲和dump文件生成的開(kāi)發(fā)庫(kù)。利用這個(gè)庫(kù)可以在Windows, Mac, Linux, iOS, Android平臺(tái)上對(duì)C/C++程序異常崩潰進(jìn)行捕獲,并生成dump文件供后期調(diào)試。

breakpad包含三個(gè)模塊

  • client
    client用戶手機(jī)崩潰的時(shí)候,client收集信息寫入特定格式的崩潰信息
  • dump_syms
    dump_syms用于從strip前的so庫(kù)抽取出調(diào)試符號(hào)保存到syms符號(hào)文件中
  • minidump_stackwalk
    利用minidump_stackwalk,從syms符號(hào)文件和包含崩潰信息的dmp文件提取出完整的崩潰調(diào)用堆棧

breakpad使用

編譯

1、獲取breakpad源碼
git clone https://github.com/google/breakpad.git

2、 進(jìn)入到Breakpad的下載目錄,創(chuàng)建mac目錄

3、指定編譯目錄(-prefix 需要指定絕對(duì)路徑),開(kāi)始編譯

*** 換成自己的絕對(duì)路徑
./configure -prefix=***/breakpad/mac/  
make

4、編譯完成后,可以在mac目錄下看到編譯后的產(chǎn)物,
minidump_stackwalk 文件,用來(lái)根據(jù) minidump 文件生成堆棧跟蹤log


zm20220906-1542-2.png

libbreakpad.a文件,可以直接集成在client里面


Screenshot2022_09_06_162915.jpg

dump_syms工具在src/tools下面, mac平臺(tái)需要xcode工程打開(kāi)對(duì)應(yīng)目錄工程編譯
最新代碼可能編譯不通過(guò),可參考:
https://groups.google.com/g/google-breakpad-discuss/c/fierVnIAv1M

  • 在linux平臺(tái)編譯生成的dump_syms 僅能在linux平臺(tái)運(yùn)行 ,解析 linux上運(yùn)行的so符號(hào)信息
  • 在mac平臺(tái)編譯生成的dump_syms 僅能在mac平臺(tái)運(yùn)行 ,解析mac上運(yùn)行的so符號(hào)信息
  • 在windows平臺(tái)編譯生成的dump_syms 僅能在windows平臺(tái)運(yùn)行 ,解析windows上運(yùn)行的so符號(hào)信息

故如果是調(diào)試Android設(shè)備,需要在linux設(shè)備上編譯dump_syms
如果使用mac上編譯的dump_syms提取android native的so 會(huì)出現(xiàn)以下提示

file is neither a fat binary file nor a Mach-O object file

在mac上執(zhí)行 linux編譯的dump_syms提取android native的so 會(huì)出現(xiàn)以下提示

zsh: exec format error: dump_syms

使用方法一

  • 使用dump_syms生成符號(hào)表: ./dump_syms ~/Test/Caputre > Capture.syms
  • 創(chuàng)建symbol files專有目錄結(jié)構(gòu):
    head -n1 Capture.syms //查看層次文件,得到./symbols/PanoramaCapture/3EXXXXX/
    mkdir -p ./symbols/PanoramaCapture/3EXXXXXX/
  • 將符號(hào)文件移動(dòng)進(jìn)去 mv Capture.syms ./symbols/PanoramaCapture/3EXXXXX/
  • 利用minidump_stackwalk分析dump文件: ./minidump_stackwalk minidump.dmp ./symbols

得到詳細(xì)的堆棧信息


zm20220906-1650-2.png

使用方法二

在mac上面調(diào)試Android native崩潰時(shí),mac無(wú)法生成linux的dump_syms
但是minidump_stackwalk提取dump文件的堆棧信息不受影響,故可以采用minidump_stackwalk + add2line結(jié)合的方式

  • 生成堆棧信息 ./minidump_stackwalk minidump.dmp > stack.txt

得到以下信息


zm20220906-1718-2.png
  • 使用add2line 生成對(duì)應(yīng)類、函數(shù)位置
    aarch64-linux-android-addr2line -C -f -e libtest.so 0x335418

參考鏈接:
https://wenku.baidu.com/view/02de4975322b3169a45177232f60ddccda38e662.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容