相关 Apple 官方文档

iOS Crash文件的解析需要四个文件(其实三个也够):

新建一个文件夹,将上面四个文件放进去,使用以下命令查找 symbolicatecrash 文件的位置:

find /Applications/Xcode.app -name symbolicatecrash -type f

使用以下命令确定和 bilibili.dSYM 文件里的 UUID 一致

dwarfdump --uuid bilibili.dSYM

使用该命令解析:

./symbolicatecrash bilibili.crash bilibili.dSYM > crash.log

如果遇到无法找到DEVELOPER_DIR的错误:

export DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer'

打开新生成的 crash.log 文件,搜索关键词 Exception 查看崩溃信息,从 Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d 中的 code 可以确定大致原因。

Exception Type

此类型的Excpetion是我们最长碰到的Crash,通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的”()”还会带有补充信息。

* SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。
* SIGABRT:  收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。
* SEGV:(Segmentation  Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;
* SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)
* SIGILL:尝试执行非法的指令,可能不被识别或者没有权限

此类异常通常由于线程执行非法指令导致

除零错误会抛出此类异常

Exception Code