加入友盟統計功能后,友盟后臺會有一個錯誤分析的統計項,點進去之后可以查看項目的錯誤報告:
這份報告所包含的主要信息有:
1、首行是錯誤的原因。
2、淡綠色的地址,這就是錯誤代碼的位置。
3、 dSYM UUID,這個是dSYM文件的唯一標識。dSYM 是保存 16 進制函數地址映射信息的中轉文件,我們調試的 symbols 都會包含在這個文件中,并且每次編譯項目的時候都會生成一個新的 dSYM 文件。
4、CPU Type. 定位錯誤的時候,我們也需要用到這個參數。
了解了這些內容,下面我們要做的就是找出問題所在。
第一種方式:
找到當前工程的archivers文件,將其拖到下圖的路徑下,任意紅色框的文件夾下即可,如圖:
然后打開終端,跳到指定的版本目錄下,如上圖的1.0.5
然后我們回到第一步的界面,點開頂部(默認頂部會是最終的錯誤根源)的地址,我們會發現
將此段代碼粘貼到終端中回車即可。
第二種方式:dSYMTools
https://github.com/answer-huang/dSYMTools
這是一個開源的項目,下載進行運行會得到如下頁面
選擇相應版本,勾選cpu類型,同友盟那個圖表,然后將內存地址拷貝到錯誤信息內存地址處就可以看到錯誤信息:
這樣就可以很容易的看到錯誤的信息并修正。
如果我們不知道我們的錯誤是哪個分支哪個版本,可以通過以下方法進行:
Dwarfdump,可以簡便地檢測出app和相應的dSYM是否匹配使用起來很簡單。分三步即可。
1> 根據crash log,得到App的UUID。UUID是個字符串,由32個字符組成。得到了UUID,你才能知道是你的哪個版本在用戶的iPhone上出了問題。
1.1> 使用xcode連接崩潰設備,打開window->organizer,左側應用列表選中你的app,頂部tab切換到crash,找到你的crash,右鍵菜單show in finder->顯示包內容->/DistributionInfos/all/Logs,即可看到當前類型的所有閃退列表。
1.2> 在終端執行以下命令。 Binary Images: 0xb6000 - 0xb7fff +Example armv7 <270a9b9d7a333a4a9f1aaf8186f81394> /var/mobile/Applications/28D4F177-D312-4D3B-A76C-C2ACB4CB7DAD/Example.app/Example 0x2feb5000 - 0x2fed6fff dyld armv7 <4a817f3e0def30d5ae2032157d889c1d> /usr/lib/dyld 這里,構建UUID是270a9b9d7a333a4a9f1aaf8186f81394,和路徑應用程序的可執行文件是Example.app/Example。
2> 使用dwarfdump檢查app,看哪個app是上面那個UUID。命令行格式:dwarfdump —uuid YourApp.app/YourApp
3> 用dwarfdump檢查dSYM文件是否是上面的UUID。命令行格式:dwarfdump —uuid YourApp.app.dSYM如果三者的UUID都是一致的,那么恭喜你,該crash log可以被正確解析出來,stack traces信息可以被正確地拿到。