1、什么是 dSYM 文件
-
Xcode 編譯項目后,我們會看到一個同名的 dSYM 文件,dSYM 是保存 16 進制函數地址映射信息的中轉文件,我們調試的 symbols 都會包含在這個文件中,並且每次編譯項目的時候都會生成一個新的 dSYM 文件,位於
/Users/<用戶名>/Library/Developer/Xcode/Archives
目錄下,對於每一個發布版本我們都很有必要保存對應的 Archives 文件。 -
AUTOMATICALLY SAVE THE DSYM FILES 這篇文章介紹了通過腳本每次編譯后都自動保存 dSYM 文件
2、dSYM 文件有什么作用
- 當我們軟件 release 模式打包或上線后,不會像我們在 Xcode 中那樣直觀的看到用崩潰的錯誤,這個時候我們就需要分析 crash report 文件了,iOS 設備中會有日志文件保存我們每個應用出錯的函數內存地址,通過 Xcode 的 Organizer 可以將 iOS 設備中的 DeviceLog 導出成 crash 文件,這個時候我們就可以通過出錯的函數地址去查詢 dSYM 文件中程序對應的函數名和文件名。大前提是我們需要有軟件版本對應的 dSYM 文件,這也是為什么我們很有必要保存每個發布版本的 Archives 文件了。
3、如何將文件一一對應
-
每一個 xx.app 和 xx.app.dSYM 文件都有對應的 UUID,crash 文件也有自己的 UUID,只要這三個文件的 UUID 一致,我們就可以通過他們解析出正確的錯誤函數信息了。
-
1)查看 xx.app 文件的 UUID,在終端中輸入命令 :
$ dwarfdump --uuid xx.app/xx (xx代表你的項目名)
-
2)查看 xx.app.dSYM 文件的 UUID ,在終端中輸入命令:
dwarfdump --uuid xx.app.dSYM
-
3)crash 文件內 Binary Images: 下面一行中 <> 內的 e86bcc8875b230279c962186b80b466d 就是該 crash 文件的 UUID,而第一個地址 0x1000ac000 便是 slide address:
Binary Images: 0x1000ac000 - 0x100c13fff Example arm64 <e86bcc8875b230279c962186b80b466d> /var/containers/Bundle/Applic