参考
Crash收集
- App Store崩溃:Xcode - Organizer
- 手机崩溃:Xcode - Device - View Device Logs / 控制台
- 从真机设备中直接获取Crash日志;
- 打开
设置->隐私->分析->分析数据,在其中找到你想要的应用程序的日志,日志将使用以下格式命名:<应用名称> _ <崩溃时间> _ <设备名>; - 选择所需的日志,复制文本或点击右上角的分享按钮分享出去,并且把分享得到的.ips.synced或者复制文本而来的.txt文件的后缀名改为.crash,因为Xcode不接受没有.crash扩展名的崩溃日志;
- 打开
- 三方平台:友盟、bugly
Crash分析,参考
需要dSYM、crash文件的UUID是一致的。
-
使用
symbolicatecrash工具新建文件夹将
symbolicatecrash、dSYM、crash文件放到同一个文件夹下,执行symbolicatecrash命令进行分析。 -
atos命令行工具
-
dSYM小工具
2、3都是通过崩溃地址和偏移量,从dSYM中获取到函数信息
崩溃产生的场景
- CPU无法执行的指令
- 僵尸对象
- 访问PageZero区(不可读、写、执行)
- 除0
- 系统bug
- 语言层面:最终都会调用到abort
- 方法未找到
- 容器类访问异常:越界、向容器中添加nil
- KVO
- KVC
- UserDefault
- C++抛出的异常
- 被系统强杀:
- OOM
- ANR
- 死锁
- 后台任务执行超时
- 设备内存紧张
- 设备过热
- 资源异常
- 非法应用签名
- 开发环境触发断言
异常的类型
- Mach异常
- BSD异常
- Exception
- 异常发生时,内核异常处理程序接收到异常消息,并将其封装为Mach消息,通过mach_msg发送到异常端口
- 内核线程会创建一个异常处理函数,循环接受异常消息
- 接收到异常消息后,将其转换为BSD信号,然后转发出去