iOS异常捕捉简介

iOS系统自带的 Apple’s Crash Reporter 记录在设备中的Crash日志,Exception Type项通常会包含两个元素:
Mach异常如 :EXC_BAD_ACCESS
Unix信号如 : SIGSEGV。
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x041a6f3

  1. 所有Mach异常都在host层被ux_exception转换为相应的Unix信号,并通过threadsignal将信号投递到出错的线程。
  2. EXC_BAD_ACCESS (SIGSEGV)表示的意思是:Mach层的EXC_BAD_ACCESS异常,在host层被转换成SIGSEGV信号投递到出错的线程。既然最终以信号的方式投递到出错的线程,那么就可以通过注册signalHandler来捕获信号: signal(SIGSEGV,signalHandler);
  3. 正如上述所说,可以通过捕获Mach异常、或Unix信号两种方式来抓取crash事件,于是总结起来实现方案就一共有3种。
    1. Mach异常方式
    2. Unix信号方式 : signal(SIGSEGV,signalHandler)
    3. Mach异常+Unix信号方式

你可能感兴趣的:(iOS异常捕捉简介)