iOS Crash log獲取和解析

Crash log獲取

Step 1:
安裝iExplore的Mac版本,並在iExplore中按提示安裝FUSE插件,下載地址(破解版本):
http://ifunapple.com/2013/10/...
Step 2:
將iOS的文件系統mount成mac本地磁盤。
鏈接iOS設備 至Mac,打開iExplore,在左側的文件加列表中選擇須要mount爲磁盤的文件夾,右鍵選擇Mount as Disk(左圖),例如,咱們將手機QQ的安裝目錄mount爲一個本地磁盤,而後咱們就能在Finder中發現多了一個com.tencent.mqq 的磁盤(右圖)。python

clipboard.png
clipboard.png

這也就意味着你能夠在命令行或是python代碼中來操做iOS設備上的文件了app

clipboard.png

這裏有幾點須要注意:函數

  1. 不要直接mount根目錄,不然mount後的磁盤是隻讀的
  2. 首先mount Root文件夾,再mount Apps中具體的一個應用文件夾,不要直接mount Apps目錄,不然該mount的磁盤也是隻讀的
  3. 當手機上相應目錄文件發生變化後,mount的disk不會自動刷新,即執行ls命令看不出新增的文件,解決方法是能夠在該目錄touch一個文件,就能觸發刷新操做,固然別忘了刪除你touch的臨時文件

Step 3:
實現python代碼來完成文件傳輸,例如拉取crashlog到mac上的示例代碼爲:工具

clipboard.png

Crash Log解析

解決方案測試

若是出現了只有地址的狀況,只要.app和.dSYM文件還在的話,symbolicatecrash工具就能夠把對應的函數名解析出來。
其實這裏關係到編譯後的兩個文件:MyApp.app以及MyApp.app.dSYM,若是崩潰的程序正好是這臺Mac編譯出來的話,而且對應的同時編譯出來的app和dSYM文件還在build目錄下的話(即還沒編譯過其餘更新的版本),Orgnizer會把crash文件的函數名解析出來,若是沒了的話,就是光禿禿的地址了,這個時候即便拿一樣的代碼再次編譯,也不能解析出代碼信息來了,因此發佈的版本必定要保留.app和.dSYM文件。
所以,當咱們須要解析這些函數地址的時候,能夠先找開發同窗要這個版本的.app和.dSYM文件,咱們也稱做符號表。

具體使用symbolicatecrash工具和.app及.dSYM文件,解析函數名的方法以下:ui

  1. 新建一個專門的目錄進行解析處理,如: /crash
  2. 把symbolicatecrash工具從原來的位置拷貝到/crash。

Xcode 4.3以上版本的symbolicatecrash的位置和老版本的不一致了:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/
Xcode 4.3以前:
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrashspa

  1. 把對應的.app和.dSYM文件拷貝到/crash,再把須要解析的crash文件也拷貝到/crash
    關於這兩個符號表文件咱們能夠找開發同窗要,若是是本身在Xcode上編譯出來的版本,也能夠在build下找到。步驟Xcode -> Window -> Organizer -> Archives -> 右擊給測試的包->「Show in Finder」->「顯示包內容」->複製目錄「Products/Applications/」下面的.app到symbolicatecrash同級目錄下。
  2. 假設crash文件是MyApp_2013-xxx-iPhone.crash, .dSYM文件是MyApp.app.dSYM,而後把MyApp.app也和MyApp.app.dSYM文件放在一塊兒,再使用以下命令進行解析:

$ ./symbolicatecrash MyApp_2013-xxx-iPhone.crash MyApp.app.dSYM > MyApp_symbol.crash插件

  1. 若是解析成功了,那麼就會有函數名了(以下):

clipboard.png

相關文章
相關標籤/搜索