Mach异常与Unix信号
来源:互联网 发布:js删除数组中某个元素 编辑:程序博客网 时间:2024/05/17 09:16
前言
日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 。追求方便省心,对于保密性要求不高的程序来说,也可以选择各种一条龙Crash统计产品,如 Crashlytics,Hockeyapp ,友盟,Bugly 。
正文
Mach异常是什么?
Mach是一个XNU的微内核核心,Mach异常是指最底层的内核级异常,被定义在
Exception Type: EXC_BAD_ACCESS (SIGSEGV)//Mach层的EXC_BAD_ACCESS异常,在host层被转换成SIGSEGV信号投递到出错的线程。Exception Subtype: KERN_INVALID_ADDRESS at 0x041a6f3
Mach异常是如何与Unix信号建立联系?
所有Mach异常都在host层被ux_exception转换为相应的Unix信号,并通过threadsignal将信号投递到出错的线程。
iOS中的 POSIX API 就是通过 Mach 之上的 BSD 层实现的。
从 EXC_BAD_ACCESS (SIGSEGV) ,可以看出Mach层的EXC_BAD_ACCESS异常,在host层被转换成SIGSEGV信号投递到出错的线程。既然最终以信号的方式投递到出错的线程,那么就可以通过注册signalHandler来捕获信号:
signal(SIGSEGV,signalHandler);
抓取crash事件可以通过捕获Mach异常、或Unix信号
这两种方式 优选Mach异常,因为Mach异常处理会先于Unix信号处理发生
ps:转换Unix信号
因为硬件产生的信号(通过CPU陷阱)被Mach层捕获,然后才转换为对应的Unix信号;苹果为了统一机制,于是操作系统和用户产生的信号(通过调用kill和pthread_kill)也首先沉下来被转换为Mach异常,再转换为Unix信号。--》转换Unix信号是为了兼容更为流行的POSIX标准(SUS规范),这样不必了解Mach内核也可以通过Unix信号的方式来兼容开发
阅读全文
0 0
- Mach异常与Unix信号
- Mach 常见异常类型
- 监控线程的 Mach 异常
- UNIX下C语言----时钟与信号
- Unix 系统信号集与编程
- 【Unix】信号
- Unix 信号
- unix 信号
- 异常控制流 之 进程与信号
- unix内核概述-信号与进程间的通信
- unix环境高级编程-alarm、pause()与信号处理函数
- Unix环境编程之定时、信号与中断
- Unix网络编程 之 进程与信号(1)
- Unix网络编程 之 进程与信号(2)
- Unix网络编程 之 进程与信号(3)
- 信号分类与详解 (1) 软硬件异常信号 和 其他信号
- UNIX环境高级编程——可靠信号与不可靠信号
- 《unix高级环境编程》信号——信号发送与捕获
- 使用Chrome来调试你的Android App
- 基于自编码器的生成对抗网络AEGAN
- NAND FLASH
- sails.js使用mysql模块搞定事务
- python学习笔记--Dictionary
- Mach异常与Unix信号
- 迷宫问题 BFS
- 浅谈ES6模块基础知识
- 软件开发过程中文档的作用
- Jenkins常用插件之MSBuild Plugin
- CCF 201709-04
- springboot\maven 页面图片展示商品实现分页
- java.lang.NumberFormatException: multiple points已解决
- 关于CAS服务端登录前ajax访问后台方法被拦截的配置