预备知识:OS X系统分析

1.内核XNU是Darwin的核心,也是整个OS X的核心。XNU本身由以下几个组件构成:

Mach微核心

BSD层

libKern

I/O Kit

此外,内核是模块化的,允许根据需要动态加载插件形式的内核扩展。

2.Mach:XNU的核心,Mach仅能处理操作系统最基本的职责:

进程和线程抽象。

虚拟内存管理

任务调度

进程间通信和消息传递机制(例如:NSMachPort)

3.所以OS X是在Mach内核的基础上构建的,苹果不鼓励直接只用Mach的API,但是Mach系统调用仍然可以在用户态访问。而BSD层是对Mach内核的封装,任何额外的功能,比如文件和设备的访问,都是在BSD层实现的。

4.BSD: 是建立在Mach之上,提供更可靠的API,提供了POSIX兼容性。BSD层提供了更高层次的抽象,包括:

UNIX进程模型

POSIX线程模型及其相关的同步原语

网络协议栈

UNIX用户和组

文件系统访问

设备访问

iOS Crash原理分析

iOS系统的Exception Type项通常包含两个元素:Mach异常和Unix信号。

Exception Type: EXC_BAD_ACCESS (SIGSEGV)

Exception Subtype: KERN_INVALID_ADDRESS 0x041a6f3

Mach的部分API暴露给用户态,用户态的开发者可以直接通过Mach API设置thread, task, host的异常端口来捕获异常,摘取Crash事件。所有的Mach异常都在host层被ux_exception转换成对应的Unix信号,并通过threadsignal将信号投递到出错的线程。那么就可以通过注册signalHandler来获取信号signal(SIGSEGV,signalHandler);

crash捕获途径:

1.Mach异常

2.Unix信号

优选Mach异常,因为Mach异常处理会先于Unix信号处理发生,如果Mach异常的handler让程序exit了,那么Unix信号就永远不会到达这个进程了。转换Unix信号是为了兼容更为流行的POSIX标准(SUS规范),这样不必了解Mach内核也可以通过Unix信号的方式来兼容开发。

总结:所以通常代码中的只捕获Exception是不够的。


作者:简单的快乐着
链接:http://www.jianshu.com/p/c2212058161f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. DevExtreme 学习应用[1]
  2. golang笔记——包
  3. LeetCode-Repeated DNA Sequences (位图算法减少内存)
  4. mysql执行完select后,释放游标
  5. 追加文件内容java
  6. java调用webservice
  7. Akka(20): Stream:压力缓冲-Batching backpressure and buffering
  8. 72、django之简单验证码实现与form表单钩子函数补充
  9. 编译装php7.2 && nginx-1.14
  10. NPOI操作Excel(一)--NPOI基础
  11. 【LeetCode每天一题】Reverse Linked List(链表反转)
  12. Redis 非关系性数据库集群的搭建与常用方法
  13. Java转义emoji等特殊符号
  14. 牛客OI周赛4-提高组-C-战争[并查集]
  15. (笔记)Mysql命令mysqladmin:修改用户密码
  16. REST接口设计规范总结
  17. c++主程这种事情,就是这样,看人先看人品,没人品,他的能力与你何关?
  18. sublime_text3常用操作与快捷键
  19. Bootstrap-table固定表头并解决表头与内容不对齐
  20. 环境变量PATH超长问题[转]

热门文章

  1. 新IOS编程语言 Swift 新编译器Xcode6
  2. 关于ListView的setEmptyView没效果的问题
  3. ubuntu安装wine 安装QQ
  4. Size Classes with Xcode 6:为所有的尺寸准备一个Storyboard
  5. 2018.09.08 DL24 Day1 总结
  6. 6 Workbook 对象
  7. 第八周 Leetcode 44. Wildcard Matching 水题 (HARD)
  8. bzoj1531
  9. bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
  10. 洛谷P4397 [JLOI2014]聪明的燕姿