關于ios的crash log的解析,自從接觸ios以來學到的解析方法,一直是非常傳統也非常複雜的,過程基本如下:
- 首先.app和DSYM,以及crash log三個檔案。建議放一個檔案夾。
-
驗證三者的UUID是否一緻,如果不一緻,将無法解析。驗證方法如下:
2.1檢視xx.app檔案的uuid的方法,在terminal中輸入指令:
dwarfdump --uuid xxx.app/xxx (xxx工程名)
2.2 檢視xx.app.dSYM檔案的uuid的方法,在terminal中輸入指令:
dwarfdump --uuid xxx.app.dSYM (xxx工程名)
2.3 而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内。如:
armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>
- Xcode有自帶的symbolicatecrash工具,可以通過dSYM檔案将crash檔案中的16進制位址轉換成可讀的函數位址,symbolicatecrash工具位于:/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
-
設定xcode DEVELOPER_DIR:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
- 最後執行: symbolicatecrash xxx.crash xxx.app.dSYM > new.log
這樣在這個檔案夾中你會發現,原來的記憶體位址變成了函數名。
不過這是比較老的方法了,步驟雖然不多,但是如果crash log檔案很多的話,也挺費時間。不過在最新的xcode中其實并不需要在做這些複雜的過程,有一篇部落格就已經說了,連結如下:http://www.cnblogs.com/max5945/p/3663966.html。
原來也說得很清楚,就是spotlight你的crash log所對應的dsym和.app檔案(應該是根據UUID比對)。這樣你隻需要把crash log對應的dsmy和.app檔案拷貝到電腦,就不用解析上面繁瑣的步驟了,把crash log拷貝到xcode中的device logs中就可以自動解析出來了。很友善。
轉載于:https://my.oschina.net/u/2433745/blog/632409