iOS性能优化-崩溃原理及防护

356 阅读2分钟

参考

崩溃原理

崩溃防护

Crash收集

  • App Store崩溃:Xcode - Organizer

image.png

  • 手机崩溃:Xcode - Device - View Device Logs / 控制台

image.png

image.png

image.png

  • 从真机设备中直接获取Crash日志;
    • 打开设置->隐私->分析->分析数据,在其中找到你想要的应用程序的日志,日志将使用以下格式命名:<应用名称> _ <崩溃时间> _ <设备名>;
    • 选择所需的日志,复制文本或点击右上角的分享按钮分享出去,并且把分享得到的.ips.synced或者复制文本而来的.txt文件的后缀名改为.crash,因为Xcode不接受没有.crash扩展名的崩溃日志;

image.png

  • 三方平台:友盟、bugly

Crash分析,参考

需要dSYM、crash文件的UUID是一致的。

  1. 使用symbolicatecrash工具

    新建文件夹将symbolicatecrash、dSYM、crash文件放到同一个文件夹下,执行symbolicatecrash命令进行分析。

  2. atos命令行工具

  3. dSYM小工具

2、3都是通过崩溃地址和偏移量,从dSYM中获取到函数信息

崩溃产生的场景

  • CPU无法执行的指令
    • 僵尸对象
    • 访问PageZero区(不可读、写、执行)
    • 除0
    • 系统bug
  • 语言层面:最终都会调用到abort
    • 方法未找到
    • 容器类访问异常:越界、向容器中添加nil
    • KVO
    • KVC
    • UserDefault
    • C++抛出的异常
  • 被系统强杀:
    • OOM
    • ANR
    • 死锁
    • 后台任务执行超时
    • 设备内存紧张
    • 设备过热
    • 资源异常
    • 非法应用签名
  • 开发环境触发断言

异常的类型

  • Mach异常
  • BSD异常
  • Exception

image.png

  • 异常发生时,内核异常处理程序接收到异常消息,并将其封装为Mach消息,通过mach_msg发送到异常端口
  • 内核线程会创建一个异常处理函数,循环接受异常消息
  • 接收到异常消息后,将其转换为BSD信号,然后转发出去