Crash收集的方式

来源:互联网 发布:js遍历二维数组 编辑:程序博客网 时间:2024/06/06 19:25

前言

可以通过捕获Mach异常、或Unix信号两种方式来抓取crash事件

1)Mach异常方式

这里写图片描述

2)Unix信号方式

signal(SIGSEGV,signalHandler);

3)Mach异常+Unix信号方式

We still need to use signal handlers to catch SIGABRT in-process. The kernel sends an EXC_CRASH mach exception to denote SIGABRT termination. In that case, catching the Mach exception in-process leads to process deadlock in an uninterruptable wait. Thus, we fall back on BSD signal handlers for SIGABRT, and do not register for EXC_CRASH.

在优选捕获Mach异常的情况下,也放弃捕获EXC_CRASH异常,而选择捕获与之对应的SIGABRT信号

通过注册NSUncaughtExceptionHandler捕获应用级异常NSException

对于应用级异常NSException,如果没有特殊处理, 崩溃在main函数的crash日志,但是函数栈里面没有对应的代码

只有拿到这个NSException,获取它的reason,name,callStackSymbols信息才能确定出问题的程序位置。

多个Crash日志收集服务共存的时候注意事项

1)拒绝传递 UncaughtExceptionHandler

在开发测试阶段,可以利用 fishhook 框架去hookNSSetUncaughtExceptionHandler方法,这样就可以清晰的看到handler的传递流程断在哪里,快速定位污染环境者

原创粉丝点击