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

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

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

全部留言(52)

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

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

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

    作者回复: 很好的建议

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

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

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

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

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

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

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

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

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

    作者回复: 后台工作超时

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

    作者回复: 下一篇就是了

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

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

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

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

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