http://m.blog.csdn.net/kangguang/article/details/62501490

用汇编语言编写的软件跟用脚本或标记语言编写的Web应用的差别在于,前者在出现问题时会崩溃,由于Web应用运行在浏览器环境中,所以Web应用很少会对内存的使用造成破坏或是导致浏览器崩溃。如果你以前使用的是高级开发语言,那么可能不太了解Xcode用来表示各种崩溃类型的术语。崩溃通畅是指操作系统向正在运行的程序发送的信号。

1.EXC_BAD_ACCESS

在访问一个已经释放的对象或向它发送消息时,EXC_BAD_ACCESS 就会出现。造成EXC_BAD_ACCESS最常见的是,在初始化方法中初始化变量时用错了所有权修饰符,这会导致对象被释放。举个例子,在viewdidload 方法中为UITableViewController 创建一个包含元素的NSMutableArray,却将该数组的所有权修饰符设成了 unsate_unretained 或 assion 而不是strong  现在 cellForRowAtIndexPath:中,若要访问已经释放掉的对象时,就会得到名为EXC_BAD_ACCESS的崩溃。

2.SIGSEGV

段错误信号SIGSEGV 是操作系统产生的一个更严重的问题。当硬件出现错误、访问不可读的内存地址或向受保护的内存地址写入数据时,就会发生这个错误。

硬件错误这一情况并不常见。当要读取保存在RAM中数据,而该位置的RAM硬件出现问题时,你会收到SIGSEGV。SIGSEGV更多是出现在后两种情况。默认情况下,代码页不允许进行写操作,而数据页不允许进行执行操作。当应用中的某个指针指向代码页并试图修改指向位置的指时,你会收到SIGSEGV。当要读取一个指针的值,而它被初始化成指向无效内存地址的垃圾值时,你也会收到SIGSEGV。

SIGSEGV错误调试起来更困难,而导致SIGSEGV的最常见原因是不正确的类型转换。要避免过度使用指针或尝试手动修改指针来读取数据结构。如果你那样做了,而在修改指针时没有注意内存对齐和填充问题,就会收到SIGSEGV。

3 SIGBUS

总线错误信号(SIGBUS) 代表无效内存访问,即访问的内存是一个无效的内存地址。也就是说,那个地址指向的位置根本不是物理内存地址(它可能是某个硬件芯片的地址)。SIGBUS和 SIGSEGV 都属于EXC_BAD_ACCESS的子类型

4 SIGTRAP

SIGTRAP 代表陷阱信号,它并不是一个真正的崩溃信号。它会在处理器执行trap指令时发送。LLDB 调试器通常会处理此信号,并在指定的断点处停止运行。如果你收到了原因不明的SIGTRAP,先清楚上次的输出,然后重新运行构建通常能解决这个问题。

5 EXC_ARITHMETIC

当要除零时,应用会收到EXC_ARITHMETIC 信号。这个错误应该很容易解决。

6 SIGILL

SIGILL代表 SIGNAL_ILLEGL INSTRUCTION (非法指令信号)。当在处理器上执行非法指令时,它就会发生。执行非法指令是指,将函数指针传给另一个函数时,该函数指针由于某种原因是坏的,指向了一段已经释放的内存或是一个数据段。有时你收到的是GNAL_ILLEGL INSTRUCTION 而不是 SIGILL ,虽然它们是一回事,不过EXC_*等同于此信号不依赖体系结构。

7 SIGABRT

SIGABRT 代表SIGNAL_ABORT(中止信号)。当操作系统发现不安全的情况时,它能够对这种情况进行更多控制:必要的话,它能要求进程进行清理工作。在调试造成此信号的底层错误时,并没有什么妙招。cocos2d或UIKit等框架通常会在特定的前提条件没有满足或一些糟糕的情况出现时调C函数abort(由它来发送此信号)。当SIGABRT 出现时,控制台通常会输出大量的信息,说明具体哪里出错了。由于它是可控制的崩溃,所以可以在LLDB控制台上键入bt 命令打印出回搠信息。

下面是控制台上输出的出现SIGABRT时的回搠信息

7 0x8badf00d 是一个固定的错误码,这种崩溃通畅比较容易分辨,也就是俗称的看门狗超时,它经常出现在执行一个同步网络调用而阻塞线程的情况,因此,永远不要进行同步网络调用

最后为了让崩溃更加的优雅 可自定义错误信号处理程序

可参考Mattt Gallagher开发的一个的开源类

UncaughtExceptionHandler

参考文章 http://write.blog.csdn.net/postedit

iOS 不同的崩溃类型的更多相关文章

  1. iOS中的崩溃类型

    http://blog.csdn.net/womendeaiwoming/article/details/44243571 OS中的崩溃类型 在这里了解一下XCode用来表示各种崩溃类型的术语,补充一 ...

  2. 【译】理解与分析ios应用的崩溃报告

    源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时,创建一份“崩溃报告”对于理解崩 ...

  3. 转 理解与分析ios应用的崩溃报告

    理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时 ...

  4. iOS系统app崩溃日志手动符号化

    iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...

  5. 经典好文:android和iOS平台的崩溃捕获和收集

    通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助.本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开 ...

  6. android和iOS平台的崩溃捕获和收集

    转自:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019349.html 通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人 ...

  7. iOS开发-应用崩溃日志揭秘(一)

    作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...

  8. iOS开发--应用崩溃日志揭秘(二)

    场景 4: 吃棒棒糖时闪退! 用户邮件说, “当rage master吃棒棒糖时应用就闪退…” 另一用户说, “我让rage master 吃棒棒糖,没几次应用就闪退了!”崩溃日志如下: Incide ...

  9. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

随机推荐

  1. 洛谷P2258 子矩阵

    P2258 子矩阵 题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4 ...

  2. ORM(一)

    ORM常识: 1.一对多,多的一方设置外键字段,有外键字段的表叫做子表.没有外键字段的表叫做主表. 2.主表放到子表的下面,否则子表找不到主表,写数据要先往主表中写. 数据库:(1)不创建主键,会自动 ...

  3. 跳坑 小程序swiper组件 轮播图片 右边空白问题

    swiper 组件 设置轮播图片时,右侧会出现空白的情况:是因为 swiper组件有默认的 高度和宽度,所以我们在设置图片高度和宽度的同时, 也要为 设置高度和宽度,和高度和宽度样式一样的就可以.

  4. JMeter - 如何创建可重用和模块化测试脚本

    概述: 我的应用程序几乎没有业务关键流程,我们可以从中提出不同的业务工作流程.当我试图在JMeter中提出性能测试脚本时,我需要找到一些方法来创建可重用/模块化的测试脚本.这样我就可以创建不同的工作流 ...

  5. 给奇数的li标签添加蓝色,给偶数的li标签添加红色

    今天遇到的面试题,哎,不看参考手册还是写的蛋疼啊!给奇数的li标签添加红色,给偶数的li标签添加蓝色 直接撸代码吧: <!DOCTYPE html> <html lang=" ...

  6. 瓷砖覆盖(状压DP)

    题目描述 Description 用1*2的瓷砖去铺N*M的地面,问有多少种铺法 输入描述 Input Description 第一行有两数n,m.表示地面的大小 输出描述 Output Descri ...

  7. poj 2348 Euclid's Game

    题目: 给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后为非负数.先把一个数变为0的人获胜. 分析: 很显然,当大数是小数的整数倍时为必胜态. 从这道题学会一个叫做自由度的东西 ...

  8. docker jvm 占用高的问题定位

    定位流程 先使用一些轻便的工具查看总体情况, 如果情况糟糕, 再使用重量级的工具 jstack       查看线程数是否过多 jstat -gc -gcutil 查看gc次数和时间是否过多, 各个分 ...

  9. Java文件与io——字节数组流数据流字符串流

    字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...

  10. Storm概念学习系列之storm-starter项目(完整版)(博主推荐)

    不多说,直接上干货! 这是书籍<从零开始学Storm>赵必厦 2014年出版的配套代码! storm-starter项目包含使用storm的各种各样的例子.项目托管在GitHub上面,其网 ...