iOS 不同的崩溃类型
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
iOS 不同的崩溃类型的更多相关文章
- iOS中的崩溃类型
http://blog.csdn.net/womendeaiwoming/article/details/44243571 OS中的崩溃类型 在这里了解一下XCode用来表示各种崩溃类型的术语,补充一 ...
- 【译】理解与分析ios应用的崩溃报告
源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时,创建一份“崩溃报告”对于理解崩 ...
- 转 理解与分析ios应用的崩溃报告
理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时 ...
- iOS系统app崩溃日志手动符号化
iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...
- 经典好文:android和iOS平台的崩溃捕获和收集
通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助.本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开 ...
- android和iOS平台的崩溃捕获和收集
转自:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019349.html 通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人 ...
- iOS开发-应用崩溃日志揭秘(一)
作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...
- iOS开发--应用崩溃日志揭秘(二)
场景 4: 吃棒棒糖时闪退! 用户邮件说, “当rage master吃棒棒糖时应用就闪退…” 另一用户说, “我让rage master 吃棒棒糖,没几次应用就闪退了!”崩溃日志如下: Incide ...
- iOS测试常见崩溃
什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...
随机推荐
- c#中ToString("yyyyMMdd") 与ToString("yyyymmdd")区别
string a= DateTime.Now.ToString("yyyyMMdd") ; string b=DateTime.Now.ToString("yyyymmd ...
- hdu3830(lca + 二分)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3830 题意: 有三个点 a, b, c, 对于其中任意一点 x 可以跨过一个点移动到另一个位置, 当 ...
- Spring MVC那点事儿
自问自答 1 Spring MVC的启动原理? spring mvc是基于ioc容器的,因此需要先创建IOC容器,才能创建对应的spring mvc执行环境. IOC容器是通过ContextLoade ...
- Error: npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
执行npm install 时,提示警告信息: Error: npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0. ...
- 1100 Mars Numbers(20 分)
People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...
- RetryException
public class RetryException extends Exception { public TempestRetryException(Throwable e) { super(e) ...
- 查询rabbitmq
package com.yunda.app.service; import java.io.InputStream; import java.net.HttpURLConnection; import ...
- Spark最简安装
该环境适合于学习使用的快速Spark环境,采用Apache预编译好的包进行安装.而在实际开发中需要使用针对于个人Hadoop版本进行编译安装,这将在后面进行介绍. Spark预编译安装包下载——Apa ...
- javaweb项目导入myecplise出错
项目导入出错:移动项目的时候.classpath .project不要删 build path -> use for source floder 把某一文件夹当作源码文件夹 bulid path ...
- 读取java配置文件properties
java项目里很多参数都是写在配置文件properties上,如果需要读取的话,可以使用jdk里提供的Properties类进行处理. 具体写法如下: public class PropertiesC ...