OC底层源码的三种方式
1.直接使用符号断点
2.通过control + step into (step into instruction)
3.汇编方法
下面以alloc为例,详细描述如何使用三种方法进行源码探索
一、直接使用符号断点
1.选择断点Symbolic Breakpoint

2.在输入符号断点名称中,符号位置输入alloc

3.在HLPerson *p1 = [HLPerson alloc]处加一个断点
tips:在走到这部分断点之前,需要关闭上面新增的符号断点,原因是因为alloc的调用有很多,如果开启了就不能准确的定位到HLPerson的alloc方法

4.程序运行, 断在HLPerson *p1 = [HLPerson alloc]部分时,打开 alloc 符号断点,继续执行

以下为alloc 符号断点断住的堆栈调用情况,从下图可以看出alloc的源码位于libobjc.A.dylib库(从Apple 相应的开源网址下载 objc 源码进行查看)

二、通过control + step into (step into instruction)
1.在HLPerson *p1 = [HLPerson alloc]处加一个断点,运行程序,会断在此位置

2.按住control键,选择 step into 键

3.进去后,显示如下内容,然后再添加一个objc_alloc符号断点

4.符号断点后显示了 objc_alloc 所在的源码库

三、汇编方法
1.Xcode 工具栏 选择 Debug --> Debug Workflow --> Always Show Disassembly,这个选项表示始终显示反汇编 ,即通过汇编

2.在HLPerson *p1 = [HLPerson alloc]处加一个断点,运行程序

3.当程序运行到[HLPerson alloc]时,堆栈调用信息如下,此时按住control,点击 step into 键进入,执行到对应 objc_alloc

4.同样通过添加 objc_alloc 的符号断点然后继续执行,便可查看源码所在库

至此,我们已经了解了三种源码探索的方式,后续将在探索的过程中使用这三种方式。
