iOS崩溃捕获原理
定义自己的信号处理函数,代替内核的默认处理,需要监听从当mach微内核发生mach异常(EXC_BAD_ACCESS,EXC_CRASH等,在这一瞬间先暂停所有子线程(除捕获线程外),捕获到各个线程的backtrace,backtrace只能以16进制地址信息存储、产生异常的线程、捕获发生的时间、可以获取其他硬件信息、获取当前进程加载的二进制镜像文件包括镜像开始地址,结束地址,镜像名字)、app info,崩溃的uuid,Last Exception Backtrace等;与之对应mach异常转换为unix信号量(SIGSEGV,SIGBUS、SIGILL、SIGTRAP等),退出进程。需要用到相关API介绍绍:http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/。
如何拿到线程调用栈:
1、Objective-c层API:[NSThread callStackSymbols]
2、C语言层API:backtrace();
3、通过寄存器数据获取