使用symbolicatecrash解析崩潰日志

為了方便愁溜,現(xiàn)在桌面上新建一個名為crash的文件夾罐栈,這樣可以在解析的時候少些一堆路徑。

整體流程如下:
需要準備三個文件:

1)珠十、.app.dSYM(Debug Symbol) 和 .app(可要可不要)
2)料扰、.crash
3)、symbolicatecrash
把這三個文件放入同一個文件夾焙蹭,命令行執(zhí)行symbolicatecrash解析命令晒杈,就可以得到一個新的new.crash文件,查看這個文件就可以看到崩潰位置孔厉。

1拯钻、如何獲得.app.dSYM和.app文件

自己電腦打的包:
選擇Window --> Organizer --> Archives,選中自己剛打的包撰豺,右鍵粪般,Show in Finder,會看到一個.xcarchive的文件郑趁。
選中.xcarchive刊驴,右鍵姿搜,顯示包內(nèi)容寡润。
在名為dSYMs的文件夾,里面找到.app.dSYM文件舅柜,復制到桌面新建的文件夾下梭纹。
注: 如果項目中使用了很多第三方庫,dSYMs文件夾中還會有很多第三方庫的.dSYM文件(.framework.dSYM)致份。仔細找才能找到我們需要的.app.dSYM文件变抽。
在名為Products文件夾中,點擊進入Applications文件夾氮块,找到.app(可能不帶.app后綴)文件绍载,復制到桌面新建的文件夾下。(其實這個文件在使用symbolicatecrash解析crash的時候也派不上用場)

問題: 為什么打出來的包沒有找到.app.dSYM

1)滔蝉、在Build Settings中击儡,搜索Debug Information Format,查看值是否為DWARF with dSYM File蝠引。
如果選為DWARF則不會產(chǎn)生dSYM文件阳谍,必須選擇DWARF with dSYM File才會生成符號表文件蛀柴。

image.png

2)、在Build Settings中矫夯,搜索Generate Debug Symbols,看一下下面的值是否都為Yes鸽疾,如果為No,則不會生成符號表文件训貌,打出來的包也就找不到.app.dSYM文件制肮。

image.png

總之,只有Debug Information FormatDWARF with dSYM FileGenerate Debug SymbolsYES旺订,這兩個條件同時滿足時弄企,才能生成.app.dYSM文件。

xcode打出去的包默認是release包区拳,如果你把打出去的包改為了debug包拘领,那么Debug Information Format里的debug項也要改為DWARF with dSYM File

2樱调、如何獲得.crash文件

手機插線連上Xcode约素,選擇Window --> Devices and Simulators
選擇對應(yīng)的app,點擊View Device Logs笆凌,如果很久沒看過這個信息圣猎,打開后還要讀取好久才能完全讀完。
直接插線運行乞而,出現(xiàn)的崩潰在這里是看不到的送悔,只有殺掉app,從手機桌面點擊icon啟動之后的崩潰爪模,才能在這里看見

image.png

找到最新的崩潰日志欠啤,右鍵,選擇Export Log屋灌,導出.crash文件到桌面即可洁段。
image.png

3、如何獲得symbolicatecrash

可能不同版本Xcode或者mac系統(tǒng)不同共郭,symbolicatecrash所在文件夾也不一樣祠丝,不能用別人提供的路徑去找,比如/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash除嘹,這是往上被人提供的路徑写半,里面根本就沒有symbolicatecrash。
一定要使用如下命令去找尉咕,這才是本機symbolicatecrash所在的有效路徑叠蝇。

在終端輸入以下命令:

find /Applications/Xcode.app -name symbolicatecrash -type f

執(zhí)行結(jié)果如下:


image.png

可以看到有多個路徑,我們直接取最后一個就行龙考,路徑為:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
然后右鍵finder蟆肆,選擇前往文件夾...矾睦,輸入這個路徑就可以。
也可以自己選中Xcode炎功,右鍵顯示包內(nèi)容枚冗,一層一層的順著文件夾層級去找。

4蛇损、解析crash

在桌面上新建一個文件夾赁温,把.app文件、.app.dSYM文件淤齐、.crash文件股囊、symbolicatecrash工具,一起放到新建的文件夾下更啄,如圖:


image.png

1)稚疹、校驗崩潰日志是否與dSYM文件匹配

獲取dSYM文件對應(yīng)的UUID:

$ dwarfdump —u 文件路徑/xxx.app.dSYM
或者
$ dwarfdump --uuid xxx.app.dSYM
image.png

獲取崩潰日志的UUID:
打開崩潰日志,全局搜索Binary Images祭务,獲取到如下:


image.png

可以看到兩個UUID是相同的内狗。

2)、執(zhí)行symbolicatecrash

打開命令行义锥,cd到新建的crash目錄下柳沙,執(zhí)行命令:

 ./symbolicatecrash JCrashDemo.crash JCrashDemo.app.dSYM > new.crash

報錯: Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
需要設(shè)置一下導出的環(huán)境變量:

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" 

設(shè)置完環(huán)境變量之后,再執(zhí)行上面的symbolicatecrash解析命令拌倍,就ok了赂鲤,在crash目錄下就會看到一個new.crash的解析好的文件了。如圖:
可以看到ViewController.swift這個文件的28行btnClicked(_:)這個方法里產(chǎn)生了崩潰柱恤。

image.png

問題:

確定.dSYM和.crash文件的UUID相同后数初,執(zhí)行解析命令,我們可以看到生成了new.crash文件膨更,但是終端有個報錯: No symbolic information found妙真。
錯誤原因1: .crash文件和.dSYM文件的uuid沒對上缴允。
錯誤原因2: 未知荚守。(難道是原crash文件已經(jīng)符號化過了,不需要再次符號好练般,所以報錯?)
這時候查看原crash文件和新生成的crash文件矗漾,發(fā)現(xiàn)內(nèi)容是一模一樣的,而且兩個文件里的內(nèi)容都是符號化好了的薄料。
注意:
只要手機上的應(yīng)用是這臺電腦安裝打包的敞贡,這樣的崩潰信息系統(tǒng)已經(jīng)為我們符號化好了,如果還是沒有符號化完畢 摄职,我們選擇文件誊役,然后右擊選擇Re-Symbolicate就可以(這種情況沒有必要再去手動符號化了)获列。
如果是被人安裝了你電腦打的包,崩潰后直接給你發(fā)了一個.crash文件蛔垢,讓你看一下問題击孩。或者是別人電腦打的包鹏漆,你安裝了產(chǎn)生崩潰巩梢,再自己通過Xcode導出crash,這種情況下crash的crash是沒有經(jīng)過符號化的艺玲,所以就要你自己去符號化了括蝠。

補充

1)、同一個ipa包饭聚,不管產(chǎn)生多少個.crash文件忌警,這些.crash文件的UUID都是同一個,即和這個.ipa對應(yīng)的.app.dSYM文件的UUID相同秒梳。
2)慨蓝、插線運行時產(chǎn)生的崩潰,系統(tǒng)是不會記錄的端幼,也就是說View Device Logs里沒有記錄礼烈。只有從桌面重新點擊icon啟動后產(chǎn)生的崩潰才能看到。
插線運行的情況下婆跑,如果每次運行是代碼都和上一次一模一樣此熬,那么點擊桌面icon啟動后產(chǎn)生的crash的UUID都是相同的。如果下次運行時的代碼和上次有差別滑进,哪怕只是多加了一行空格犀忱,那么兩次產(chǎn)生的crash的UUID也不同。

3)扶关、自己些demo測試時: 要想.crash文件和.app.dSYM文件的UUID相同阴汇,必須要導出.ipa包,再用手機安裝這個包节槐。也就是說產(chǎn)生crash的包和獲取.app.dSYM的包必須是同一個搀庶。(所以不能插線運行之后產(chǎn)生.crash文件后,然后重新打個一模一樣的包出來铜异,再去找.app.dSYM文件哥倔,兩者的UUID是無法匹配的。)


每次構(gòu)建時都會生成新的唯一的能夠標識那次構(gòu)建的UUID揍庄,即便你用同樣的源代碼咆蒿,通過同樣的編譯setting,UUID也不會相同。相應(yīng)的沃测,dSYM文件也不能用于解析其它(UUID對應(yīng)的)binary信息缭黔,即便構(gòu)建自于同一個源代碼。

也就是說:你必須保存你最開始上傳到App Store的發(fā)生crash的app的歸檔文件蒂破。dSYM文件和app二進制文件是一一對應(yīng)试浙,且每次構(gòu)建都不相同。即便通過相同的源碼和配置寞蚌,再執(zhí)行一次構(gòu)建田巴,生成的dSYM文件也無法和之前的crash report做符號化匹配。 如果你不在存有這個歸檔文件挟秤,你應(yīng)該重新提交一次有歸檔的新版本壹哺,以確保再發(fā)生crash的時候你可以符號化crash report。


4)艘刚、在尚未點擊Distribute App導出.ipa包前或者導出.ipa包時沒有勾選Rebuild from Bitcode管宵,dSYM文件夾下只有一個.app.dSYM文件。
如果在導出.ipa包時攀甚,勾選了Rebuild from Bitcode箩朴,那么dSYM文件夾下就會多出很多個.dSYM文件,如圖:

image.png

這些多出來的.dSYM文件的名稱秋度,就是這個.dSYM文件的uuid炸庞。它們和.app.dSYM這個主文件的uuid都不相同。

獲取dSYM文件的幾種方式荚斯。

方法一:
見上文 1埠居、如何獲得.app.dSYM和.app文件

方法二: (適用于已經(jīng)上傳到App Store的包)
在Archives organizer,選擇你之前提交到App Store的Archive文件
選擇Download dSYM按鈕Archive

image.png

Xcode會下載dSYM文件并且把他們插入到選擇的Archive中事期。這時候再按照方法一去取出來dSYM文件就行了滥壕。

方法三: (適用于已經(jīng)上傳到App Store的包)
自己進入app管理后臺,點擊TestFlight(以前是Activity)兽泣,找到你想要的構(gòu)建版本绎橘,點擊進入,選擇構(gòu)建版本元數(shù)據(jù)唠倦,點擊下載dSYM称鳞。
因為一般都會開啟bitcode,所以下載的dSYM是一個zip包牵敷。

image.png

寫在最后:
可參考文章: https://juejin.cn/post/6844903774780145678

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胡岔,一起剝皮案震驚了整個濱河市法希,隨后出現(xiàn)的幾起案子枷餐,更是在濱河造成了極大的恐慌,老刑警劉巖苫亦,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毛肋,死亡現(xiàn)場離奇詭異怨咪,居然都是意外死亡,警方通過查閱死者的電腦和手機润匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門诗眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孕讳,你說我怎么就攤上這事匠楚。” “怎么了厂财?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵芋簿,是天一觀的道長。 經(jīng)常有香客問我璃饱,道長与斤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任荚恶,我火速辦了婚禮撩穿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谒撼。我一直安慰自己食寡,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布廓潜。 她就那樣靜靜地躺著,像睡著了一般茉帅。 火紅的嫁衣襯著肌膚如雪叨叙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天堪澎,我揣著相機與錄音擂错,去河邊找鬼。 笑死樱蛤,一個胖子當著我的面吹牛钮呀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昨凡,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼爽醋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了便脊?” 一聲冷哼從身側(cè)響起蚂四,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后遂赠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體久妆,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年跷睦,在試婚紗的時候發(fā)現(xiàn)自己被綠了筷弦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抑诸,死狀恐怖烂琴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜕乡,我是刑警寧澤监右,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站异希,受9級特大地震影響健盒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜称簿,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一扣癣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憨降,春花似錦父虑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悔叽,卻和暖如春莱衩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娇澎。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工笨蚁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趟庄。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓括细,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戚啥。 傳聞我的和親對象是個殘疾皇子奋单,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容