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. 微信JSApi支付---常见问题

    1.支付一直报  “get_brand_wcpay_request:false” 错误 原因: 商户平台上设置的[支付授权目录]路劲不正确,比如:支付的页面的域名是:www.xxx.com/pay/s ...

  2. webpack@3.6.0(1) -- 快速开始

    本篇内容 前言 配置入口和输出 热更新 loader配置 js代码压缩 html的打包与发布 前言 //全局安装 npm install -g webpack(3.6.0) npm init //安装 ...

  3. PTA 1045【DP】

    思路: DP[ i ] 代表以值 i 结尾的当前最长长度. 每次枚举序列数组,dp[ i ] = max( dp[ i ] ,dp[ a[j] ] + 1); #include <bits/st ...

  4. 消息中间件 | 消息协议 | AMQP -- 《分布式 消息中间件实践》笔记

    04年,AMQP开放标准被开发 06年,AMQP规范被发布   基本概念     Message:与平台无相关的数据.     Publisher:向交换器发布消息的客户端应用程序     Excha ...

  5. 如何顺畅使用sourcetree可视化工具

    http://www.360doc.com/content/17/0711/10/11253639_670493403.shtml sourcetree软件下载 下载地址:https://www.so ...

  6. maven jetty 插件 允许修改 js

    <!--允许修改js,css--> <servlet> <servlet-name>default</servlet-name> <init-pa ...

  7. linux下.exe文件的安装与使用

    1安装wine 2 安装exe软件:下载应用软件.exe,然后点击右键用wine打开/或者在终端中wine 应用软件.exe即能安装. 卸载exe可以右键点击安装软件中uninstall.exe-用w ...

  8. Murano简介

    Project Mission The mission for this project is to provide a way to make third-party applications an ...

  9. 一次Zookeeper 扩展之殇

    一.背景 基于公司发展硬性需求,生产VM服务器要统一迁移到ZStack 虚拟化服务器.检查自己项目使用的服务器,其中zookeeper集群中招,所以需要进行迁移. 二.迁移计划 为了使迁移不对业务产生 ...

  10. Python3基础(1)Python介绍、Python2 与Python3、变量、用户输入、if...else和for循环、while循环、break与continue

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ P ...