iOS 自帶工具symbolicatecrash解析iOS Crash文件

什么是 dSYM 文件

Xcode編譯項(xiàng)目后,我們會(huì)看到一個(gè)同名的 dSYM 文件,dSYM 是保存 16 進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件,我們調(diào)試的 symbols 都會(huì)包含在這個(gè)文件中,并且每次編譯項(xiàng)目的時(shí)候都會(huì)生成一個(gè)新的 dSYM 文件,位于 /Users/<用戶名>/Library/Developer/Xcode/Archives 目錄下,對(duì)于每一個(gè)發(fā)布版本我們都很有必要保存對(duì)應(yīng)的 Archives 文件

dSYM 文件有什么作用

當(dāng)我們軟件 release 模式打包或上線后,不會(huì)像我們?cè)?Xcode 中那樣直觀的看到用崩潰的錯(cuò)誤,這個(gè)時(shí)候我們就需要分析 crash report 文件了,iOS 設(shè)備中會(huì)有日志文件保存我們每個(gè)應(yīng)用出錯(cuò)的函數(shù)內(nèi)存地址,通過(guò) Xcode 的 Organizer 可以將 iOS 設(shè)備中的 DeviceLog 導(dǎo)出成 crash 文件,這個(gè)時(shí)候我們就可以通過(guò)出錯(cuò)的函數(shù)地址去查詢 dSYM 文件中程序?qū)?yīng)的函數(shù)名和文件名。大前提是我們需要有軟件版本對(duì)應(yīng)的 dSYM 文件,這也是為什么我們很有必要保存每個(gè)發(fā)布版本的 Archives 文件了。

1.導(dǎo)出crash log

通過(guò)Xcode的Organizer查看某臺(tái)iphone設(shè)備的DeviceLog,選擇需要的crash log,導(dǎo)出XXX.crash文件。

2.找到對(duì)應(yīng)的app文件

找到當(dāng)前iphone設(shè)備上安裝的ipa文件,更改文件后綴名為zip,解壓后得到Payload文件夾,你需要的app文件就在其中了。

3.找到對(duì)應(yīng)build版本的dSYM文件

dSYM文件是iOS編譯后保存16進(jìn)制函數(shù)地址映射信息的文件,每次應(yīng)用程序build后,都會(huì)生成對(duì)應(yīng)的xxx.app, xxx.app.dSYM文件。

如何將文件一一對(duì)應(yīng)

每一個(gè) xx.app 和 xx.app.dSYM 文件都有對(duì)應(yīng)的 UUID,crash(測(cè)試給你的bug日志,也可以是ips文件) 文件也有自己的 UUID,只要這三個(gè)文件的 UUID 一致,我們就可以通過(guò)他們解析出正確的錯(cuò)誤函數(shù)信息了。

1.查看 xx.app 文件的 UUID,terminal 中輸入命令 :

dwarfdump --uuid xx.app/xx (xx代表你的項(xiàng)目名)

2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中輸入命令:

dwarfdump --uuid xx.app.dSYM 

3.crash 文件內(nèi)第一行 Incident Identifier 就是該 crash 文件的 UUID。

開始分析

找到.app文件和.app.dSYM文件

  • 在桌面創(chuàng)建一個(gè)crash文件夾,然后Xcode->Window->Organizer找到Archives找到App->右擊Show in Finder

  • 復(fù)制.app和.app.dSYM到crash夾文件:右擊.xcarchive文件->顯示包內(nèi)容

  • 在dSYMs文件夾中找到.app.dSYM

  • 在Products->Applications文件夾中找到*.app

找到symbolicatecrash

find /Applications/Xcode.app -name symbolicatecrash -type f
  • 稍等一會(huì)就會(huì)有路徑輸出,這個(gè)路徑就是symbolicatecrash的路徑
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
  • 用命令將symbolicatecrash拷貝到桌面的crash文件夾里面,與.app和.app.dSYM放一起(手動(dòng)找到symbolicatecrash,拷貝出來(lái)也行)
cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Users/你的電腦名稱/Desktop/crash

執(zhí)行symbolicatecrash

  • 打開終端用命令切換到桌面的crash目錄下:
cd /Users/你的電腦名稱/Desktop/crash
  • 執(zhí)行命令
./symbolicatecrash /Users/angelseahappiness/Desktop/crash/Control_2014-01-13-111838_Lynns-iPad3.crash /Users/angel/Desktop/crash/Control.app.dSYM > Control_symbol.crash
  • 這時(shí)候終端有可能會(huì)出現(xiàn):
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
  • 輸入命令:
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
  • 再執(zhí)行,這時(shí)候終端將會(huì)進(jìn)行處理了
  • 將終端完成以后,在crash文件夾里面會(huì)多出一個(gè)文件Control_symbol.crash:這個(gè)就是最終的文件,可以查看bug所在的位置。


    結(jié)果.png
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文就捕獲iOS Crash、Crash日志組成、Crash日志符號(hào)化、異常信息解讀、常見(jiàn)的Crash五部分介紹。...
    xukuangbo_閱讀 1,728評(píng)論 0 0
  • 開發(fā)的App或者游戲提交審核后,偶爾會(huì)收到測(cè)試反饋的消息,說(shuō)應(yīng)用崩潰了,bug偶爾出現(xiàn),難以找到確定的重現(xiàn)方法。怎...
    sky_kYU閱讀 1,518評(píng)論 0 0
  • 如果大家是用真機(jī)在調(diào)試的過(guò)程中出現(xiàn)了Crash,那么請(qǐng)看iOS調(diào)試之 crash log分析 前言 導(dǎo)讀:Unde...
    KODIE閱讀 6,611評(píng)論 7 12
  • 章節(jié)1 再見(jiàn)了我的家? 云川福利院 夏日,后院里那棵繁衍生長(zhǎng)的老榕樹,掛下一蓬蓬茂密的胡須,像是幾個(gè)龍鐘老人,懶...
    她們叫我靖哥哥閱讀 679評(píng)論 0 0

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