crash log呼叫棧看不到的解決方案(debug symbols不起作用)
1 前言
有時crash log在xcode中,看不到crash的呼叫堆疊,只有些十六進位制,下面是解決的參考方法。
2 先檢視symbolicate工具環境設定
步驟一:
在“終端”中,使用如下工具檢視symbolicate工具是否出問題了,命令後接crash log檔案。
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
如果輸出Developer3什麼的,(假設你使用的Xcode目錄是Developer),則表明你裝了多個Xcode,Xcode路徑找的不對,使用如下命令徹底解除安裝Developer3:
sudo /Developer3/Library/uninstall-devtools -mode=all
然後輸入“xcode-select -switch /Developer”選擇Developer這個目錄。
步驟二:
重複步驟一,檢視輸出,如果在symbolicate系統庫出問題,則將如下目錄刪除:
/Users/peterdou/Library/Developer/Xcode/iOS DeviceSupport/5.0.1 (9A405)
以後比方說插上手機,該目錄會重新生成。
步驟三:
重複步驟一,如果覺得應該有symbol輸出但依然看不到,則說明對應的xcarchive沒找到。
可嘗試如下“終端”命令:
以上完事後,依然不行,則嘗試下面build setting。
Ps:有可能編譯時出現libxml什麼的找不到情況,將Build setting中的屬性做如下修改:
3 再看project build setting
涉及到debug symbols的一些setting項如下:
1) Generate Debug Symbols
2) Strip Debug Symbols During Dopy
3) Symbols Hidden by Default
3.1 setting項官方文件解釋
3.2 實驗一:以某一設定為標準,做三次嘗試,依次改了某一項,比較生成的包,結果是:
設定項 |
生成檔案結果的影響 |
Generate Debug Symbols |
影響是否生成dSYM檔案 |
Strip Debug Symbols During Dopy |
此值無論YES、NO,生成的dSYM和app大小都不變。 |
Symbols Hidden by Default |
此值為YES時生成的app包稍微變小。 |
3.3 實驗二:哪些值影響symbol的顯示。
由實驗一可知,Generate Debug Symbols必須為YES,下面測試其他兩項:
設定項 |
值 |
Symbol是否顯示 |
Generate Debug Symbols |
YES |
顯示 |
Strip Debug Symbols During Dopy |
任何值 |
|
Symbols Hidden by Default |
任何值 |
結論:影響symbol顯示的,只有Generate Debug Symbols因素。
4 總結
要想看到symbol,必須:
1) 外部環境設定對;
2) Generate Debug Symbol設YES;
檢視log前,必須用“終端”命令mdimport ~/Library/Developer/Xcode/Archives/ 使得spotlight可以找到dSYM檔案。