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

先上文件,這里放上 dsym 文件夾的鏈接,可以自己下載放到桌面上腳本打開執行先試一試,crash文件夾可以直接使用,ips 文件夾需要修改腳本里面的路徑。如有錯誤請幫忙指出,謝謝!轉載請注明出處,喜歡的話,請點個贊吧!
github
百度網盤 碼 ona1
誠通網盤 碼 7701

1.什么是dSYM文件

dSYM 文件是Xcode編譯后,我們會看到一個同名的 dSYM 文件,dSYM 是保存 16 進制函數地址映射信息的中轉文件,存儲應用程序的調試 symbols。每次編譯項目或者打包的時候都會生成一個新的 dSYM 文件,當我們軟件release模式打包或上線后,不會像我們在Xcode中那樣直觀的看到用崩潰的錯誤,所以對于每一個發布版本我們都很有必要保存對應的 Archives 文件。不管你集沒集成類似Buyly的三方,要符號化分析crash日志還是得要用到對應的dSYM文件,如果沒有生成dSYM文件,可以看一下TARGETS下Build Settings里面有沒有設置,如下圖,文章可能有點啰嗦,請耐心瀏覽。

image.png


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

1、APP提交審核,有閃退bug被拒,審核人員基本會上傳crash文件給你,這時候就要自己符號化分析了。
2、你們編譯給測試同事的包,如果你們關系好,大概率會重現一遍給你看,不然可能就是導出一個ips文件直接丟給你了,也可能還有一些不太好復現的crash。
3、自己有時候調試的時候可能會用到。

注:ips文件和crash文件不一樣,Xcode13,iOS15以前設備ips文件改后綴成crash好像可以,但是之后 Apple 對符號化文件格式進行了 JSON 支持, 所以針對 iOS 15 以上產生的崩潰文件, 寫入方式應該是做了調整, 所以在對 iOS 15 以上崩潰文件進行符號化時, ips改后綴會出現符號化失敗, 報錯 No crash report version in file 的問題,改為直接使用 CrashSymbolicator.py下面會講到。

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


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

1、dSYM
編譯后Xcode13以前應該在項目的Products文件夾下,右鍵Show in Finder。
Xcode13后位于(/Users/用戶名/Library/Developer/Xcode/DerivedData/對應的應用程序/Build/Products/Debug-iphoneos)。
打包的話位于(/Users/用戶名/Library/Developer/Xcode/Archives)目錄下,也可以在Xcode選擇Window->Organize->Archives,Show in Finder。
2、crash
手機插上電腦Xcode選擇Window->Devices and Simulators,找到對應的iphone,View Device Logs,右鍵Export Log。
3、ips
可能是測試同事可能其它同事可能用戶,手機不能連接到電腦,可以在手機設置->隱私->分析與改進->分析數據,可以搜索對應的.ips.sycned文件然后查看導出修改成.ips的后綴就行,如果不是一眼能看到就直接搜項目名字。


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

注:dSYM文件要和crash,ips等文件一一對應,否則符號化會失敗,比如你1.0.1產生的crash,ips文件要和1.0.1編譯的dSYM文件匹配,注意每次編譯都會生成新的dSYM文件

1、怎么查看dSYM和ips,crash文件是否一一對應
筆者創建的項目叫Test,查看crash,ips直接雙擊打開查看,在下面例子圖有標記,dSYM使用終端命令查看如下,Test.app.dSYM修改為對應的就行

    dwarfdump --uuid Test.app.dSYM

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


image.png

image.png

image.png

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

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

image.png

首先在桌面創建一個dsym文件夾,里面再創建一個crash文件夾,dYSM文件和.crash文件拖入進去,symbolicatecrash復制進去(如果不復制工具出來,可以把文件復制到工具文件夾下執行命令),Result.crash是符號化分析后的產物,Makefile是一個用AppleScript寫的一個腳本,打開執行就能得到Result.crash(前提里面寫的一些路徑得一一對應),還可以保存成一個應用程序雙擊打開執行,具體更多好玩的得自己去了解一下。symbolicatecrash工具存放在該路徑下:

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

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

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

當三個文件都在同一個文件夾下后,我們可以通過命令來得到符號化分析后的crash文件,依次執行,命令如下:注:如果不執行第二條命令會有意想不到的結果

    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命令定位問題
其實除了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

得到的結果如上,沒錯就是最后異常回溯的第5行,有沒有發現偏移后的地址和第6行的第一個地址是一致的,所以第1個地址是開始地址,第2個地址是基地址,第3個 + 22788就是偏移量 這是十進制的,計算如下 0x1026b4000 + 0x000005904(22788轉16進制后的值)= 0x1026B9904 直接百度16進制加減法,大佬可以除外

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

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


image.png

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

image.png

image.png
image.png

image.png

CrashSymbolicator.py 操作稍微和 symbolicatecrash 會有些不同,因為是用 python 寫的腳本,所以要使用 python3 來進行調用,否則會報錯。(肯定有一大波人默默的在終端輸入python查看版本號發現還是2.7左右的版本,內心一頓XXX,其實python3早已經安裝了,不信你們終端直接輸入python3試試,如果沒有那得自己安裝了……

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

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

如果是在 CrashSymbolicator.py 文件夾下操作,dSYM 和 ips 文件需要復制到該腳本文件夾下,命令如下:

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腳本快速進行符號化分析

上述在文件夾里面執行命令雖然可以完成,但是比較麻煩,筆者做了個腳本執行,下面就看看腳本里面的代碼(其實就是封裝了幾條命令)
同樣首先在之前桌面的dsym文件夾下創建一個 ips 文件夾,dYSM文件和 .ips 文件拖入進去,Makefile腳本準備好,打開執行,Result.ips文件就出來了,

image.png

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

# 打開終端APP
tell application "Terminal"
    # 拼接導出ips結果命令 在此處替換對應的路徑
    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 ";"

    # 第一條命令 進入CrashSymbolicator.py對應的文件夾下執行操作 因為CrashSymbolicator.py關聯其它的庫也在這個文件夾內
    set order1 to "cd /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources;"

    # 第二條命令 分析導出ips結果文件
    set order2 to pythonOrderStart & dSYMPath & outfilePath & ipsPath & pythonOrderEnd

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

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

    #多條命令執行用;分割
    do script order

end tell
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容