iOS dSYM詳解和分析crash派继,ips文件

先上文件,這里放上 dsym 文件夾的鏈接捻艳,可以自己下載放到桌面上腳本打開執(zhí)行先試一試驾窟,crash文件夾可以直接使用,ips 文件夾需要修改腳本里面的路徑认轨。如有錯誤請幫忙指出,謝謝嘁字!轉(zhuǎn)載請注明出處,喜歡的話衷恭,請點(diǎn)個贊吧!
github
百度網(wǎng)盤 碼 ona1
誠通網(wǎng)盤 碼 7701

1.什么是dSYM文件

dSYM 文件是Xcode編譯后纯续,我們會看到一個同名的 dSYM 文件随珠,dSYM 是保存 16 進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件,存儲應(yīng)用程序的調(diào)試 symbols茸歧。每次編譯項目或者打包的時候都會生成一個新的 dSYM 文件,當(dāng)我們軟件release模式打包或上線后显沈,不會像我們在Xcode中那樣直觀的看到用崩潰的錯誤软瞎,所以對于每一個發(fā)布版本我們都很有必要保存對應(yīng)的 Archives 文件构罗。不管你集沒集成類似Buyly的三方智玻,要符號化分析crash日志還是得要用到對應(yīng)的dSYM文件,如果沒有生成dSYM文件吊奢,可以看一下TARGETS下Build Settings里面有沒有設(shè)置,如下圖召边,文章可能有點(diǎn)啰嗦隧熙,請耐心瀏覽幻林。

image.png


2.什么時候會用到dSYM文件

1、APP提交審核躏敢,有閃退bug被拒整葡,審核人員基本會上傳crash文件給你,這時候就要自己符號化分析了啼器。
2俱萍、你們編譯給測試同事的包,如果你們關(guān)系好更哄,大概率會重現(xiàn)一遍給你看,不然可能就是導(dǎo)出一個ips文件直接丟給你了成翩,也可能還有一些不太好復(fù)現(xiàn)的crash麻敌。
3、自己有時候調(diào)試的時候可能會用到术羔。

注:ips文件和crash文件不一樣,Xcode13释移,iOS15以前設(shè)備ips文件改后綴成crash好像可以寥殖,但是之后 Apple 對符號化文件格式進(jìn)行了 JSON 支持, 所以針對 iOS 15 以上產(chǎn)生的崩潰文件, 寫入方式應(yīng)該是做了調(diào)整, 所以在對 iOS 15 以上崩潰文件進(jìn)行符號化時, ips改后綴會出現(xiàn)符號化失敗, 報錯 No crash report version in file 的問題,改為直接使用 CrashSymbolicator.py下面會講到熏纯。

注:如果是發(fā)布Testflight版本粤策,有些公司APP更新前會先提交Testflight版本公測一下,然后很多crash的日志可以通過Apple Store Connect里面對應(yīng)的應(yīng)用叮盘,Testflight下的反饋崩潰里面看到熊户,可以直接Xcode打開,直接到Window->Organize->Crashes下直觀看到崩潰錯誤


3.dSYM嚷堡,ips,crash文件怎么拿到

1串塑、dSYM
編譯后Xcode13以前應(yīng)該在項目的Products文件夾下北苟,右鍵Show in Finder。
Xcode13后位于(/Users/用戶名/Library/Developer/Xcode/DerivedData/對應(yīng)的應(yīng)用程序/Build/Products/Debug-iphoneos)傻昙。
打包的話位于(/Users/用戶名/Library/Developer/Xcode/Archives)目錄下闺骚,也可以在Xcode選擇Window->Organize->Archives妆档,Show in Finder贾惦。
2、crash
手機(jī)插上電腦Xcode選擇Window->Devices and Simulators须板,找到對應(yīng)的iphone,View Device Logs绪颖,右鍵Export Log杰刽。
3王滤、ips
可能是測試同事可能其它同事可能用戶,手機(jī)不能連接到電腦第喳,可以在手機(jī)設(shè)置->隱私->分析與改進(jìn)->分析數(shù)據(jù)踱稍,可以搜索對應(yīng)的.ips.sycned文件然后查看導(dǎo)出修改成.ips的后綴就行,如果不是一眼能看到就直接搜項目名字扩淀。


4.具體怎么利用dSYM符號化分析

注:dSYM文件要和crash啤挎,ips等文件一一對應(yīng),否則符號化會失敗胜臊,比如你1.0.1產(chǎn)生的crash伙判,ips文件要和1.0.1編譯的dSYM文件匹配,注意每次編譯都會生成新的dSYM文件

1勒魔、怎么查看dSYM和ips,crash文件是否一一對應(yīng)
筆者創(chuàng)建的項目叫Test危虱,查看crash唐全,ips直接雙擊打開查看,在下面例子圖有標(biāo)記弥雹,dSYM使用終端命令查看如下延届,Test.app.dSYM修改為對應(yīng)的就行

    dwarfdump --uuid Test.app.dSYM

例子如下,終端顯示的是符號 - 拼接的厕吉,crash和ips文件都是連起來的械念。


image.png

image.png

image.png

2龄减、利用symbolicatecrash符號化分析crash文件

注:創(chuàng)建文件夾和文件夾放在哪都能自己看著辦只要用到對應(yīng)文件路徑的時候,路徑能對應(yīng)就可以了烁巫,以下是筆者自己創(chuàng)建的方式宠能。

image.png

首先在桌面創(chuàng)建一個dsym文件夾违崇,里面再創(chuàng)建一個crash文件夾,dYSM文件和.crash文件拖入進(jìn)去恤浪,symbolicatecrash復(fù)制進(jìn)去(如果不復(fù)制工具出來肴楷,可以把文件復(fù)制到工具文件夾下執(zhí)行命令),Result.crash是符號化分析后的產(chǎn)物砂客,Makefile是一個用AppleScript寫的一個腳本,打開執(zhí)行就能得到Result.crash(前提里面寫的一些路徑得一一對應(yīng))媚创,還可以保存成一個應(yīng)用程序雙擊打開執(zhí)行彤恶,具體更多好玩的得自己去了解一下。symbolicatecrash工具存放在該路徑下:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources

如果不一樣可能是Xcode名字不一樣芒炼?可以利用下面的命令去查找术徊,如過你的Xcode就叫Xcode話,不然改成自己Xcode路徑:

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

當(dāng)三個文件都在同一個文件夾下后子寓,我們可以通過命令來得到符號化分析后的crash文件笋除,依次執(zhí)行,命令如下:注:如果不執(zhí)行第二條命令會有意想不到的結(jié)果

    1 cd Desktop/dsym/crash
    2 export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
    3 ./symbolicatecrash Test.crash Test.app.dSYM > Result.crash

我們可以先來看看Test.crash日志符號化前后最后異瞅回溯長什么樣子:


image.png

image.png

3、利用atos命令定位問題
其實(shí)除了symbolicatecrash工具听系,atos命令也能簡單的分析一下,Test.app.dSYM/Contents/Resources/DWARF/Test 這里就存著具體符號

atos -o 項目名.app.dSYM/Contents/Resources/DWARF/項目名 -l 基地址 偏移后的地址
筆者使用的命令參考如下
atos -o Test.app.dSYM/Contents/Resources/DWARF/Test -l 0x1026b4000 0x1026B9904

image.png

得到的結(jié)果如上掉瞳,沒錯就是最后異成孪埃回溯的第5行址愿,有沒有發(fā)現(xiàn)偏移后的地址和第6行的第一個地址是一致的,所以第1個地址是開始地址损合,第2個地址是基地址,第3個 + 22788就是偏移量 這是十進(jìn)制的嫁审,計算如下 0x1026b4000 + 0x000005904(22788轉(zhuǎn)16進(jìn)制后的值)= 0x1026B9904 直接百度16進(jìn)制加減法律适,大佬可以除外

image.png

4、利用CrashSymbolicator.py符號化解析 ips 文件
CrashSymbolicator.py腳本存放在該路徑下:

/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources

如果不一樣可能是Xcode名字不一樣棉圈?可以利用下面的命令去查找眷蜓,如過你的Xcode就叫Xcode話,不然改成自己Xcode路徑:

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

但是這回不能像復(fù)制symbolicatecrash工具一樣復(fù)制出來了德召,因為這個腳本import其它文件也在同一個目錄下汽纤,我們可以終端命令進(jìn)入到這個文件夾下把 dSYM 文件和 ips 文件放入到該文件夾下執(zhí)行符號化解析命令。


image.png

下面先看兩個文件的對比肴掷。

image.png

image.png
image.png

image.png

CrashSymbolicator.py 操作稍微和 symbolicatecrash 會有些不同,因為是用 python 寫的腳本径玖,所以要使用 python3 來進(jìn)行調(diào)用梳星,否則會報錯。(肯定有一大波人默默的在終端輸入python查看版本號發(fā)現(xiàn)還是2.7左右的版本冤灾,內(nèi)心一頓XXX,其實(shí)python3早已經(jīng)安裝了匿垄,不信你們終端直接輸入python3試試,如果沒有那得自己安裝了……

python3 CrashSymbolicator.py -d /xxx.app.dSYM -o /xxx.crash -p /xxx.ips

-d '符號表路徑' -o '輸出符號化路徑' -p '蘋果給的崩潰日志'

如果是在 CrashSymbolicator.py 文件夾下操作吞杭,dSYM 和 ips 文件需要復(fù)制到該腳本文件夾下变丧,命令如下:

1 cd /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources
2 sudo python3 CrashSymbolicator.py -d Test.app.dSYM -o Result.ips -p Test.ips

5.利用AppleScript腳本快速進(jìn)行符號化分析

上述在文件夾里面執(zhí)行命令雖然可以完成,但是比較麻煩童擎,筆者做了個腳本執(zhí)行攻晒,下面就看看腳本里面的代碼(其實(shí)就是封裝了幾條命令)
同樣首先在之前桌面的dsym文件夾下創(chuàng)建一個 ips 文件夾,dYSM文件和 .ips 文件拖入進(jìn)去芯砸,Makefile腳本準(zhǔn)備好给梅,打開執(zhí)行,Result.ips文件就出來了包帚,

image.png

Makefile.scpt代碼如下:(具體語法這里就不做講解了运吓,用戶名需要替換成自己的用戶名,路徑可以自行根據(jù)需要更改)

# 打開終端APP
tell application "Terminal"
    # 拼接導(dǎo)出ips結(jié)果命令 在此處替換對應(yīng)的路徑
    set pythonOrderStart to "python3 CrashSymbolicator.py"

    # 三個路徑的前面的空格不要忽略了
    set dSYMPath to " -d /Users/用戶名/Desktop/dsym/ips/Test.app.dSYM"
    set outfilePath to " -o /Users/用戶名/Desktop/dsym/ips/Result.ips"
    set ipsPath to " -p /Users/用戶名/Desktop/dsym/ips/Test.ips"

    set pythonOrderEnd to ";"

    # 第一條命令 進(jìn)入CrashSymbolicator.py對應(yīng)的文件夾下執(zhí)行操作 因為CrashSymbolicator.py關(guān)聯(lián)其它的庫也在這個文件夾內(nèi)
    set order1 to "cd /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources;"

    # 第二條命令 分析導(dǎo)出ips結(jié)果文件
    set order2 to pythonOrderStart & dSYMPath & outfilePath & ipsPath & pythonOrderEnd

    # 第三條命令 打開分析的結(jié)果文件
    set order3 to "open Result.ips"

    # 拼接多條命令
    set order to order1 & order2 & order3

    #多條命令執(zhí)行用谋梭;分割
    do script order

end tell
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末章蚣,一起剝皮案震驚了整個濱河市姨夹,隨后出現(xiàn)的幾起案子矾策,更是在濱河造成了極大的恐慌,老刑警劉巖逃糟,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菇肃,居然都是意外死亡取募,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門斗忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來织阳,“玉大人砰粹,你說我怎么就攤上這事〖盍В” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵界酒,是天一觀的道長嘴秸。 經(jīng)常有香客問我岳掐,道長,這世上最難降的妖魔是什么串述? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任纲酗,我火速辦了婚禮,結(jié)果婚禮上觅赊,老公的妹妹穿的比我還像新娘吮螺。我一直安慰自己帕翻,他們只是感情好萝风,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睬塌,像睡著了一般卿拴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上文狱,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天缘挽,我揣著相機(jī)與錄音,去河邊找鬼苏研。 笑死腮郊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衅鹿。 我是一名探鬼主播过咬,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泵三!你這毒婦竟也來了衔掸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤纬霞,失蹤者是張志新(化名)和其女友劉穎驱显,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伏恐,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栓霜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年胳蛮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅炊。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡抚垄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桐经,到底是詐尸還是另有隱情浙滤,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布畔咧,位于F島的核電站摹菠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏次氨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一虹蓄、第九天 我趴在偏房一處隱蔽的房頂上張望薇组。 院中可真熱鬧坐儿,春花似錦宋光、人聲如沸炭菌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽克握。三九已至,卻和暖如春菩暗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背婴梧。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工客蹋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人番电。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓辆琅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親娩井。 傳聞我的和親對象是個殘疾皇子似袁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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