IOS崩溃错误总结

有缘看到这个网页,虽然没有深刻的描述错误的类型,但是简单的讲述了错误的概念,

http://www.xcodechina.com/archiver/?tid-138.html


懒得看看原网页看下面也行:

IOS 的崩溃捕获可以让已经上架或是交给客户使用的APP,当遇到不幸崩溃时可以收集到一些当前的状态,提交给开发人员方便找到错误。 所以简单的介绍一下原理,如果想直接使用的可以找第三方库或是其他推广平台的sdk,但如果是想为自己产品或是已经有现成的bug分析服务器的人可以参考一下并自己加强。
一般造成我们APP崩溃大致可分为二类,一种是语言逻辑类的错误所造成的(如野指针,内存访问异常,重复释放)等,另一类是未捕获异常(Uncaught Exception)。所以我们都要对这二类来进行捕获,IOS本身的SDK 有提供一个函数 NSSetUncaughtExceptionHandler 用来做异常处理,不过并没有将所有的异常捕获,对于第一类的崩溃,IOS本身也是属于UNIX系统,所以会用信号的方式发送出来。


列出几种信号
          SIGABRT  一般相同指针free()二次就会产生此一信号或是调用了abort()函式
          SIGFPE    错误的算术操作,一般皆是除以零造成的
          SIGSEGV  使用指针在一个无效的物理地址上存取值,此信号为Segment错误,比如 char *p = null; *p=1;
          SIGBUS    a)硬件故障
                         b)执行malloc()时,如果没有足够的内存,将会发出这信号
                         c)在有对齐位上的要求上,于对齐位的字节边界上取数据
                         此种信号指的都是(Bus Error)

          SIGTRAP  相关的硬件异常,一般都是发生在调试异常,设置了一个 trap但相关的异常发生会发送此信号
          SIGTERM  kill被缺省发送,请求中止进程
          SIGKILL     无法处理或忽略的错误,中止每一个进程


所以可以在APP的开始加上我们自己的捕获崩溃函式,一般加在didFinishLaunchingWithOptions里 

void MyUncaughtHandler(NSException *exception)
{
     //补抓到后该做什么处理
}

void MyCrashHandler(int signal)
{
      //补抓到后该做什么处理
}

void InitUnexcepationCrashReport
{
         //捕获第一类 错误信号
          signal(SIGABRT  , MyCrashHandler);
          signal(SIGFPE    ,  MyCrashHandler);
          signal(SIGSEGV  ,  MyCrashHandler);
          signal(SIGBUS    ,  MyCrashHandler);
          signal(SIGTRAP   ,  MyCrashHandler);
          signal(SIGTERM   ,  MyCrashHandler);
          signal(SIGKILL      ,  MyCrashHandler);

         //捕获第二类 UiKit 未能处理的异常
          NSSetUncaughtExceptionHandler (&MyUncaughtHandler);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值