iOS Crash文件的解析
Jan 26, 2018
iOS Crash文件的解析需要三个文件:
- bilibili.crash/bilibili.ips - 从崩溃的手机、itunes connect或者第三方日志系统获得
- bilibili.dSYM - 从 xcarchive 文件里获得
- symbolicatecrash 在 xcode 里,不同版本所在位置也不一样
解析步骤
1.新建一个文件夹,将上面四个文件放进去,使用以下命令查找 symbolicatecrash 文件的位置:
1 | find /Applications/Xcode.app -name symbolicatecrash -type f |
2.使用以下命令确定和 bilibili.dSYM 文件里的 UUID 一致
1 | dwarfdump --uuid bilibili.dSYM |
3.使用该命令解析:
1 | ./symbolicatecrash bilibili.crash bilibili.dSYM > crash.log |
如果遇到无法找到DEVELOPER_DIR的错误:
1 | export DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer' |
打开新生成的 crash.log 文件,搜索关键词 Exception 查看崩溃信息,从 Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
中的 code 可以确定大致原因。
Exception Type
- EXC_BAD_ACCESS
此类型的Excpetion是我们最长碰到的Crash,通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的”()”还会带有补充信息。
* SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。
* SIGABRT: 收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。
* SEGV:(Segmentation Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;
* SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)
* SIGILL:尝试执行非法的指令,可能不被识别或者没有权限
- EXC_BAD_INSTRUCTION
此类异常通常由于线程执行非法指令导致
- EXC_ARITHMETIC
除零错误会抛出此类异常
Exception Code
- 0xbaaaaaad 此种类型的log意味着该Crash log并非一个真正的Crash,它仅仅只是包含了整个系统某一时刻的运行状态。通常可以通过同时按Home键和音量键,可能由于用户不小心触发
- 0xbad22222当VOIP程序在后台太过频繁的激活时,系统可能会终止此类程序
- 0x8badf00d 程序启动或者恢复时间过长被watch dog终止
- 0xc00010ff 程序执行大量耗费CPU和GPU的运算,导致设备过热,触发系统过热保护被系统终止
- 0xdead10cc 程序退到后台时还占用系统资源,如通讯录被系统终止
- 0xdeadfa11 程序无响应用户强制关闭
脚本自动解析
2019 年更新…
如果每次都手动输入命令,也太繁琐了些,写个脚本自动解析,还能支持批量解。后缀改成 command
还能双击打开。。。
1 | !/bin/bash |