zoukankan      html  css  js  c++  java
  • iOS Crash

    常见原因及解决方法:

    1. 访问数组类对象越界或插入了空对象
    NSMutableArray/NSMutableDictionary/NSMutableSet 等类下标越界,或者 insert 了一个 nil 对象。
    解决办法
    使用数组时注意判断下标是否越界,插入对象前先判断该对象是否为空。
    2. 访问了不存在的方法
    解决方法
    像这种类型的错误通常出现在使用 delegate 的时候,因为 delegate 通常是一个 id 泛型,所以 IDE 也不会报警告,所以这种时候要用 respondsToSelector 方法先判断一下,然后再进行调用。
    3. 多线程并发操作
    当某个对象会被多个线程修改的时候,有可能一个线程访问这个对象的时候另一个线程已经把它删掉了,导致Crash。比较常见的是在网络任务队列里面,主线程往队列里面加入任务,网络线程同时进行删除操作导致挂掉。
    解决方法
    加锁NSLock:加锁调用 lock,解锁调用 unlock。


    捕捉闪退的方法:

    1. 若知道复现步骤,直接在xcode中加一个 All Exceptions 的断点,然后复现crash,崩溃后查看堆栈信息和崩溃代码行
    2. 若crash设备在边上,可以连上机器后,在Xcode中,Windows-Devices-View Device Log,找到crash的log,利用dYSM文件解析成明文,再分析定位crash代码行
    3. 若是用户设备上的crash,常用的是在app中集成crashlytics SDK,然后在crashlytics平台上查看crash堆栈信息

    分析异常方法:

    1. 得到crash log,第一部是用打包时.dYSM文件和二进制文件 将Crash日志解析成明文
    2. 通过分析Crash堆栈信息、进程信息等来定位代码行,通常前面1、2两种crash,都能直接定位到代码行,而多线程等,通常crash日志都是系统级的错误,定位难度较大
    3. 野路子方法:http://stackoverflow.com,在stackoverflow上搜索,通常你遇到过的crash,别人也遇到过,这上面有很多有效的解答

  • 相关阅读:
    sed处理文本文件
    多节点ssh免密匙登录
    nmon监控工具的使用
    PostgreSQL 磁盘使用大小监控
    PostgreSQL 锁监控
    PostgreSQL installations
    《卸甲笔记》-多表查询之二
    《卸甲笔记》-多表查询之一
    《卸甲笔记》-子查询
    《卸甲笔记》-分组统计查询
  • 原文地址:https://www.cnblogs.com/mobilefeng/p/4752159.html
Copyright © 2011-2022 走看看