崩溃

作者: 冰雨9527 | 来源:发表于2021-08-14 19:50 被阅读0次

通过这张图片,我们可以看到, KVO 问题、NSNotification 线程问题、数组越界、野指针等崩溃信息,是可以通过信号捕获的。但是,像后台任务超时、内存被打爆、主线程卡顿超阈值等信息,是无法通过信号捕捉到的。


我们采集到的崩溃日志,主要包含的信息为:进程信息、基本信息、异常信息、线程回溯。

进程信息:崩溃进程的相关信息,比如崩溃报告唯一标识符、唯一键值、设备标识;
基本信息:崩溃发生的日期、iOS 版本;
异常信息:异常类型、异常编码、异常的线程;
线程回溯:崩溃时的方法调用栈。
通常情况下,我们分析崩溃日志时最先看的是异常信息,分析出问题的是哪个线程,在线程回溯里找到那个线程;然后,分析方法调用栈,符号化后的方法调用栈可以完整地看到方法调用的过程,从而知道问题发生在哪个方法的调用上。

其中,方法调用栈如下图所示:

方法调用栈顶,就是最后导致崩溃的方法调用。完整的崩溃日志里,除了线程方法调用栈还有异常编码。异常编码,就在异常信息里。

一些被系统杀掉的情况,我们可以通过异常编码来分析。你可以在维基百科上,查看完整的异常编码。这里列出了 44 种异常编码,但常见的就是如下三种:

  • 0x8badf00d,表示 App 在一定时间内无响应而被 watchdog 杀掉的情况。
  • 0xdeadfa11,表示 App 被用户强制退出。
  • 0xc00010ff,表示 App 因为运行造成设备温度太高而被杀掉。

0x8badf00d 这种情况是出现最多的。当出现被 watchdog 杀掉的情况时,我们就可以把范围控制在主线程被卡的情况。我会在第 13 篇文章“如何利用 RunLoop 原理去监控卡顿?”中,和你详细说明如何去监控这种情况来防范和快速定位到问题。

0xdeadfa11 的情况,是用户的主动行为,我们不用太关注。

0xc00010ff 这种情况,就要对每个线程 CPU 进行针对性的检查和优化。我会在第 18 篇文章“怎么减少 App 的电量消耗?”中,和你详细说明。

相关文章

  • 崩溃崩溃再崩溃

    总在一次次崩溃中好起来,再一次次的崩溃。。。。 真的很厌倦这种感觉。 安心对我来说太难了。不要害怕,你的情绪很多是...

  • 2021-04-22

    每天都要精神崩溃几次 最崩溃的就是我不能真的崩溃 崩溃!

  • 崩溃的礼物🎁

    允许自己的崩溃, 看见自己的崩溃, 体验自己的崩溃, 不抗拒自己的崩溃, 明白崩溃之后的寻求触底 不期待崩溃之后有...

  • 值传递?址传递,慎用形参,崩溃修复记录

    查询崩溃问题流程 拿到崩溃日志 查看崩溃线程、崩溃原因 查看崩溃函数堆栈 确定崩溃调用参数 根据控制台日志来具体分...

  • 崩溃

    崩溃到极致 崩溃到极致 崩溃到极致

  • 崩溃优化

    1、崩溃分类 Android崩溃分为两类,分别是Java崩溃和Native崩溃。Java崩溃就是产生在Java代码...

  • 安卓Java崩溃的捕获和日志记录

    Android的两种崩溃 Android 崩溃分为 Java 崩溃和 Native崩溃两种。 Java崩溃的知识点...

  • 崩溃优化(上)

    1. Android 的两种崩溃 Android 分为 Java 崩溃和 Native 崩溃。 java 崩溃:在...

  • iOS线上崩溃追踪

    目录一、崩溃收集介绍二、第三方库收集崩溃信息三、原生收集崩溃信息四、崩溃信息符号化五、崩溃中断拦截 一、崩溃收集介...

  • 如何避免工作做到崩溃?

    用ps做图做到崩溃,写代码写到到崩溃,产品文档写到崩溃,客服打电话打到崩溃,销售业绩不好快崩溃。。 是不是...

网友评论

      本文标题:崩溃

      本文链接:https://www.haomeiwen.com/subject/ssqlbltx.html