iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

12 | iOS 崩溃千奇百怪,如何全面监控?

推荐学习其他课程
课后小作业
崩溃监控系统的不足
Bugly的崩溃监控平台展示
分析崩溃日志的步骤
崩溃日志包含的信息
监控其他无法通过信号捕获的崩溃信息
收集退后台后超过保活阈值的崩溃信息
如何避免后台崩溃
Background Task方式的使用方法
iOS后台保活的5种方式
后台容易崩溃的原因
信号捕获方法的实现代码
第三方开源库捕获崩溃日志
Xcode菜单中的崩溃日志收集方法
崩溃监控系统的重要性
崩溃对应的异常情况
小结
采集到崩溃信息后的分析和解决
信号捕获不到的崩溃信息收集
信号可捕获的崩溃日志收集
崩溃监控概述
iOS崩溃监控

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。今天我要跟你说的是崩溃监控。
App 上线后,我们最怕出现的情况就是应用崩溃了。但是,我们线下测试好好的 App,为什么上线后就发生崩溃了呢?这些崩溃日志信息是怎么采集的?能够采集的全吗?采集后又要怎么分析、解决呢?
接下来,通过今天这篇文章,你就可以了解到造成崩溃的情况有哪些,以及这些崩溃的日志都是如何捕获收集到的。
App 上线后,是很脆弱的,导致其崩溃的问题,不仅包括编写代码时的各种小马虎,还包括那些被系统强杀的疑难杂症。
下面,我们就先看看几个常见的编写代码时的小马虎,是如何让应用崩溃的。
数组越界:在取数据索引时越界,App 会发生崩溃。还有一种情况,就是给数组添加了 nil 会崩溃。
多线程问题:在子线程中进行 UI 更新可能会发生崩溃。多个线程进行数据的读取操作,因为处理时机不一致,比如有一个线程在置空数据的同时另一个线程在读取这个数据,可能会出现崩溃情况。
主线程无响应:如果主线程超过系统规定的时间无响应,就会被 Watchdog 杀掉。这时,崩溃问题对应的异常编码是 0x8badf00d。关于这个异常编码,我还会在后文和你说明。
野指针:指针指向一个已删除的对象访问内存区域时,会出现野指针崩溃。野指针问题是需要我们重点关注的,因为它是导致 App 崩溃的最常见,也是最难定位的一种情况。关于野指针等内存相关问题,我会在第 14 篇文章“临近 OOM,如何获取详细内存分配信息,分析内存问题?”里和你详细说明。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了iOS应用崩溃监控的重要性以及常见的崩溃情况。首先列举了导致应用崩溃的常见情况,包括数组越界、多线程问题、主线程无响应、野指针等。重点介绍了崩溃监控系统的重要性,以及如何收集崩溃日志,包括信号可捕获的崩溃日志收集的方法和相关代码示例。另外,还介绍了如何实现堆栈信息数据的持久化存储。文章还讨论了后台容易崩溃的原因、避免后台崩溃的方法以及如何收集退后台后超过保活阈值而导致信号捕获不到的崩溃信息。最后,提到了其他无法通过信号捕获的崩溃信息的监控方法。整体而言,本文通过介绍崩溃监控的重要性和实现方法,为开发者提供了全面的监控崩溃信息的技术指导。文章还提到了如何分析崩溃日志,解决崩溃问题,以及崩溃监控平台的统计功能,为开发者提供了全方位的崩溃问题解决方案。文章内容丰富,涵盖了崩溃监控的各个方面,对于iOS开发者来说具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(52)

  • 最新
  • 精选
  • Hjay
    文中所讲的crash捕获只说了针对信号的,基本都是需要内核操作的一些才会以信号的形式给到进程,而oc自己也有定义一些并没深入到内核的一些exception,这些是通过注册exceptionhandle来进行捕获的,所以crash的收集应该是分两块,只说信号这一种是不够完整的

    作者回复: 你说的没错,现在收集 crash 的框架都是用的Mach异常+Unix信号方式这样的方式。

    2019-04-11
    5
    25
  • Lotty周小鱼
    有个小小的建议,希望戴老师以后贴出的代码片段写一下来源或者源码链接,这样方便查看的时候快速翻阅上下文。

    作者回复: 很好的建议

    2019-04-25
    9
  • Hiuzi
    戴老师,有没有办法在一个项目了集成某个第三方sdk的两个版本?最近被admob sdk坑惨了,一个月发了4个版本都是修复bug的,我想更新下如果有闪退只能回退老版本了,回退老版本只能发版解决了,有没有不发版的方案解决这个问题呢?

    作者回复: 没法集成两个版本,符号肯定冲突

    2019-04-11
    3
  • 青冈
    戴老师,bugly针对应用进入后台被系统强杀也算是一种crash。您告诉我是后台工作超时,那这种情况的话我是应该在DidEnterBackground这种函数中做什么处理;还是在bugly中做什么配置,不捕捉把这种情况下的crash呢? app进入后台之后,bugly抓捕crash的名称是 SEGV 是 segmentation violation 的缩写,是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。这种的话,我应该

    作者回复: 在DidEnterBackground里尽快完成,不要超时了。

    2019-04-12
    3
    2
  • drunkenMouse
    “先要找到它们的阈值,然后在临近阈值时还在执行的后台程序”其实不一定非要是在后台吧?

    作者回复: 对,不一定非要在后台

    2019-04-09
    1
  • Null
    crash中是否有明确的标识显示是由于哪个三方库引起的吗?

    作者回复: 通过方法堆栈看

    2019-05-16
    2
  • 青冈
    Bugly中,针对应用进入后台被系统强杀也算是一种crash。这种怎么处理呢?

    作者回复: 后台工作超时

    2019-04-08
  • 王强😄😄😄😁
    戴铭老师,主线程无响应 这个可以提前讲吗,最近工程需要到这个地方的知识,谢谢戴铭老师。

    作者回复: 下一篇就是了

    2019-04-08
  • 小前端
    文中说Crash率一般是crash次数与启动次数的比值?是说我一天打开100次app,crash了两次,所以是2个点?我觉得是不是用DAU作为分母更合适?

    作者回复: 一次启动最多一次崩溃,一次启动没有崩溃说明成功了,一次启动崩溃了说明失败了

    2019-04-07
    3
  • Dude
    Bugly中在哪可以看到异常编码?

    作者回复: 崩溃列表点击进去就可以看到详情了

    2019-04-06
收起评论
显示
设置
留言
52
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部