美文网首页
异常处理相关资料收集

异常处理相关资料收集

作者: 西孟___ | 来源:发表于2016-08-18 11:07 被阅读145次

    漫谈iOS Crash收集框架
    Handling unhandled exceptions and signals
    plcrashreporter

    注意:因为硬件产生的信号(通过CPU陷阱)被Mach层捕获,然后才转换为对应的Unix信号;苹果为了统一机制,于是操作系统和用户产生的信号(通过调用kill和pthread_kill)也首先沉下来被转换为Mach异常,再转换为Unix信号。【摘自:http://www.cocoachina.com/ios/20150701/12301.html

    ios不响应signal处理函数?原因是xcode编译运行了程序,如果直接发送signal,xCode会直接收到信号立刻中断程序运行,直接跳过signal处理函数。需要手动停止xCode运行的程序,再在模拟器 运行,发送了signal,这样才可以进入了signal处理方法!【摘自:http://blog.csdn.net/u011615945/article/details/38059947

    如果同时有多方通过NSSetUncaughtExceptionHandler注册异常处理程序,和平的作法是:后注册者通过NSGetUncaughtExceptionHandler将先前别人注册的handler取出并备份,在自己handler处理完后自觉把别人的handler注册回去,规规矩矩的传递。不传递强行覆盖的后果是,在其之前注册过的日志收集服务写出的Crash日志就会因为取不到NSException而丢失Last Exception Backtrace等信息。(P.S. iOS系统自带的Crash Reporter不受影响)【摘自:http://www.cocoachina.com/ios/20150701/12301.html

    对于多方通过NSSetUncaughtExceptionHandler注册异常处理的情况,我实际中可行的做法是

    static NSUncaughtExceptionHandler *currentUncaughtExceptionHandler;
    currentUncaughtExceptionHandler = NSGetUncaughtExceptionHandler();
    /*
     handle you runloop and handle exception
     **/
    //NSSetUncaughtExceptionHandler(currentUncaughtExceptionHandler);//试了这种写法,但最终没执行currentUncaughtExceptionHandler,然后改成下面的写法了
    NSSetUncaughtExceptionHandler(NULL);//担心不重置为NULL会出现handle死循环
    currentUncaughtExceptionHandler(exception);
    

    看了几篇异常处理相关的博客,多半都是获取backtrace,但是获取的信息很有限,并不能获取crash发生时多个线程的信息,导致有些时候很难定位到问题所在,plcrashreporter做的就很好,看来以后有空还得研究下plcrashreporter
    源码了。

    相关文章

      网友评论

          本文标题:异常处理相关资料收集

          本文链接:https://www.haomeiwen.com/subject/imlvsttx.html