crash 日志產(chǎn)生的兩種原因
- 違反 iOS 策略
- 代碼所出現(xiàn)的 bug
常見的Exception Type & Exception Code
Exception Type
-
EXC_BAD_ACCESS
通常用于訪問了不改訪問的內(nèi)存導(dǎo)致。
- SIGSEGV: 通常由于重復(fù)釋放對象導(dǎo)致,這種類型在切換了ARC以后應(yīng)該已經(jīng)很少見到了。
- SIGABRT: 收到Abort信號退出,通常Foundation庫中的容器為了保護狀態(tài)正常會做一些檢測,例如插入nil到數(shù)組中等會遇到此類錯誤。
- SEGV:(Segmentation Violation),代表無效內(nèi)存地址,比如空指針,未初始化指針,棧溢出等;
- SIGBUS:總線錯誤,與 SIGSEGV 不同的是,SIGSEGV 訪問的是無效地址,而 SIGBUS 訪問的是有效地址,但總線訪問異常(如地址對齊問題)
- SIGILL:嘗試執(zhí)行非法的指令,可能不被識別或者沒有權(quán)限。
-
EXC_BAD_INSTRUCTION
此類異常通常由于線程執(zhí)行非法指令導(dǎo)致。
-
EXC_ARITHMETIC
除零錯誤會拋出此類異常。
-
EXC_BREAKPOINT//SIGTRAP
與異常退出類似,如果存在debugger,則它被喚起;否則,則與異常退出的處理一致。
-
EXC_GUARD
訪問非法資源,例如:文件描述符已經(jīng)被關(guān)閉,還繼續(xù)訪問。
-
EXC_RESOURCE
達到資源訪問上限,這不是崩潰,而是os發(fā)出的一個通知
具體操作
- 從崩潰系統(tǒng)把相關(guān)文件下載下來,.crash 文件和 .dSYM 文件
- 使用命令解析
cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Users/Loong/Downloads/kiwi/dSYMs
./symbolicatecrash kiwi-2017-11-11-151231.crash /Users/Loong/Downloads/kiwi/dSYMs/kiwi.app.dSYM > kiwi.crash
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
參考文章: