iOS Crash日志收集上报

iOS Crash日志收集上报是指在iOS系统中,收集和上报应用程序崩溃日志的过程。该过程涉及到多个技术层面,包括Mach异常、Unix Signal、NSException等。一、Mach异常是最底层的内核级异常,是指在iOS系统的内核层中发生的异常。Mach异常可以是EXC_BAD_ACCESS(内存访问异常)等。Mach异常是通过Mach API暴露给用户态的,可以直接通过Mach API设置thread、task、host的异常端口来捕获Mach异常,抓取Crash事件。二、Unix Signal Unix Signal是Unix系统中的异步通知机制,可以用于处理Mach异常。在host层,Mach异常被ux_exception转换为相应的Unix Signal,并通过threadsignal将信号投递到出错的线程。 Unix Signal可以被系统中的signal机制来处理。三、NSException NSException是OC层的异常,是由iOS库或者各种第三方库或Runtime验证出错误而抛出的异常。NSException可以被try catch捕获,如果未被捕获或被@throw抛出,可以通过注册NSSetUncaughtExceptionHandler函数来捕获处理。四、Crash事件处理当错误发生时,先在最底层产生Mach异常;Mach异常在host层被转换为相应的Unix Signal;在OC层如果有对应的NSException(OC异常),就转换成OC异常,OC异常可以在OC层得到处理;如果OC异常一直得不到处理,程序会强制发送SIGABRT信号中断程序。在OC层如果没有对应的NSException,就只能让Unix标准的signal机制来处理了。五、Crash日志收集上报实现在捕获Crash事件时,优选Mach异常。因为Mach异常处理会先于Unix信号处理发生,如果Mach异常的handler让程序exit了,那么Unix信号就永远不会到达这个进程了。在方案实现时,可以选择PLCrashReporter这样优秀的开源项目,也可以选择友盟、Bugly这样完善的Crash上报和统计的产品。六、iOS系统自带的Apple’s Crash Reporter iOS系统自带的Apple’s Crash Reporter记录在设备中的Crash日志,Exception Type项通常会包含两个元素:Mach异常和Unix信号。Mach异常是指最底层的内核级异常,被定义在下。每个thread、task、host都有一个异常端口数组,Mach的部分API暴露给了用户态,用户态的开发者可以直接通过Mach API设置thread、task、host的异常端口,来捕获Mach异常,抓取Crash事件。 iOS Crash日志收集上报是指在iOS系统中,收集和上报应用程序崩溃日志的过程,涉及到Mach异常、Unix Signal、NSException等多个技术层面。
pdf 文件大小:618.05KB