天天看點

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 的磁盤(右圖)。

iOS Crash log擷取和解析
iOS Crash log擷取和解析

這也就意味着你可以在指令行或是python代碼中來操作iOS裝置上的檔案了

iOS Crash log擷取和解析

這裡有幾點需要注意:

  1. 不要直接mount根目錄,否則mount後的磁盤是隻讀的
  2. 首先mount Root檔案夾,再mount Apps中具體的一個應用檔案夾,不要直接mount Apps目錄,否則該mount的磁盤也是隻讀的
  3. 當手機上相應目錄檔案發生變化後,mount的disk不會自動重新整理,即執行ls指令看不出新增的檔案,解決方法是可以在該目錄touch一個檔案,就能觸發重新整理操作,當然别忘了删除你touch的臨時檔案

Step 3:

實作python代碼來完成檔案傳輸,例如拉取crashlog到mac上的示例代碼為:

iOS Crash log擷取和解析

Crash Log解析

解決方案

如果出現了隻有位址的情況,隻要.app和.dSYM檔案還在的話,symbolicatecrash工具就可以把對應的函數名解析出來。
其實這裡關系到編譯後的兩個檔案:MyApp.app以及MyApp.app.dSYM,如果崩潰的程式正好是這台Mac編譯出來的話,并且對應的同時編譯出來的app和dSYM檔案還在build目錄下的話(即還沒編譯過其他更新的版本),Orgnizer會把crash檔案的函數名解析出來,如果沒了的話,就是光秃秃的位址了,這個時候即使拿同樣的代碼再次編譯,也不能解析出代碼資訊來了,是以釋出的版本一定要保留.app和.dSYM檔案。
是以,當我們需要解析這些函數位址的時候,可以先找開發同學要這個版本的.app和.dSYM檔案,我們也稱作符号表。
           

具體使用symbolicatecrash工具和.app及.dSYM檔案,解析函數名的方法如下:

  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/symbolicatecrash

  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. 如果解析成功了,那麼就會有函數名了(如下):
iOS Crash log擷取和解析