iOS 发生在系统内核层(Mach Exception)的异常

原文链接:https://blog.csdn.net/mingC0758/article/details/98659480

发生在系统内核层(Mach Exception),可以通过void(signal(int, void ()(int)))(int)捕捉。

Exception Code
0x8badf00d 读作“ate bad food”,程序启动或者恢复时间过长被watch dog终止。
0xdead10cc 读作“dead lock” 表示应用因为在后台运行时占用系统资源,如通讯录数据库不释放而被终止。
0xbad22222 该编码表示 VoIP 应用因为过于频繁重启而被终止。
0xdeadfa11 读做 “dead fall”! 该代码表示应用是被用户强制退出的。根据苹果文档, 强制退出发生在用户长按开关按钮直到出现 “滑动来关机”, 然后长按 Home按钮。强制退出将产生 包含0xdeadfa11 异常编码的崩溃日志, 因为大多数是强制退出是因为应用阻塞了界面。
0xbaaaaaad 用户按住Home键和⾳音量键,获取当前内存状态,不代表崩溃
0xc00010ff 读作“cool off” 因为太烫了被干掉

UNIX Signal和Mach Exception其实是同一份异常在不同层次的处理。

SIGALRM–程序超时信号
SIGTERM–程序Kill中止信号
SIGSTOP–程序键盘中止信号
SIGKILL–程序结束接收中止信号
SIGHUP–程序终端中止信号
SIGINT–程序键盘中断信号
SIGABRT–程序中止命令中止信号
SIGILL–程序非法指令信号
SIGSEGV–程序无效内存中止信号
SIGFPE–程序浮点异常信号
SIGBUS–程序内存字节未对齐中止信号
SIGPIPE–程序Socket发送失败中止信号

GitHUb上有UncaughtExceptionHandler,其中捕捉这类系统内核层的Crash使用的方法:

void InstallUncaughtExceptionHandler(void)
{
    
    signal(SIGHUP, SignalHandler);
    signal(SIGINT, SignalHandler);

    signal(SIGABRT, SignalHandler);
    signal(SIGILL, SignalHandler);
    signal(SIGSEGV, SignalHandler);
    signal(SIGFPE, SignalHandler);
    signal(SIGBUS, SignalHandler);
    signal(SIGPIPE, SignalHandler);
}

如果本文对你有所帮助,记得点击一下喜欢哈

你可能感兴趣的:(iOS 发生在系统内核层(Mach Exception)的异常)