crash 解析 (节选)

1、Exception Type1)EXC_BAD_ACCESS

此类型的Excpetion是我们最长碰到的Crash,通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的"()"还会带有补充信息。

SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。

SIGABRT:  收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。

SEGV:(Segmentation  Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;

SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题, 它之所以称为总线错误是因为对未对齐的内存访问时,被阻塞的组件就是地址总线)

SIGILL:尝试执行非法的指令,可能不被识别或者没有权限

2)EXC_BAD_INSTRUCTION

此类异常通常由于线程执行非法指令导致

3)EXC_ARITHMETIC

除零错误会抛出此类异常

2、Exception Code

0xbaaaaaad   此种类型的log意味着该Crash log并非一个真正的Crash,它仅仅只是包含了整个系统某一时刻的运行状态。通常可以通过同时按Home键和音量键,可能由于用户不小心触发

0xbad22222 当VOIP程序在后台太过频繁的激活时,系统可能会终止此类程序

0x8badf00d  这个前面已经介绍了,程序启动或者恢复时间过长被watch dog终止

0xc00010ff   程序执行大量耗费CPU和GPU的运算,导致设备过热,触发系统过热保护被系统终止

0xdead10cc   程序退到后台时还占用系统资源,如通讯录被系统终止

0xdeadfa11   前面也提到过,程序无响应用户强制关闭


Exception Type: EXC_CRASH (SIGKILL)       //异常的类型

Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000118  //异常子类型我手机中 WeChat展示形式如下:

Exception Code: 0x0000000000000000, 0x0000000000000000    //异常地址

Exception Note: EXC_CORPSE_NOTIFY        //描述

Termination reason:  Namespace SPRINGBOARD, Code 0x8badf00d  //终止原因

Triggered by Thread:  0                     //异常发生的线程(0为主线程,其他为子线程)




0xbada5e47

当你听从了上面的建议,大大方方的把尽可能多的关键代码封入 Background Task 后,那么你可能会遇到下面的 crash:

Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: Namespace ASSERTIOND, Code 0xbada5e47

同理也是和 Background Task 相关,原因是 Apple 认为你启动了过多的 Background Task,所以要杀掉。多少算多呢?几十个不多,当前的 threshold 是 1000 个,超过 1000 个才会强杀。如果你的 Background Task 封装发生在 db layer,出现大量数据过来需要存储或读取的时候,还是有可能会 hit 这个 limit。

另一个 0xbada5e47 的可能原因是,Background Task 在超时之后会调用 expiry handler,无论你有多少个 Background Task,所有 expiry handler 执行的时间不能超过若干秒,一旦超过也会被枪杀。所以在 expiry handler 里面切忌有任何比如 disk io 的耗时操作。



0x8badf00d: 读做 “ate bad food”! (把数字换成字母,是不是很像 :p)该编码表示应用是因为发生watchdog超时而被iOS终止的。  通常是应用花费太多时间而无法启动、终止或响应用系统事件。

0xbad22222: 该编码表示 VoIP 应用因为过于频繁重启而被终止。

0xdead10cc: 读做 “dead lock”!该代码表明应用因为在后台运行时占用系统资源,如通讯录数据库不释放而被终止 。

0xdeadfa11:读做 “dead fall”! 该代码表示应用是被用户强制退出的。根据苹果文档, 强制退出发生在用户长按开关按钮直到出现 “滑动来关机”, 然后长按 





节选自 :

 https://www.cnblogs.com/someonelikeyou/p/6379861.html

http://www.cocoachina.com/articles/27303

你可能感兴趣的:(crash 解析 (节选))