OC底层源码探索的三种方式
- 直接使用符号断点
- 通过control+step into
- 汇编方法
下面将以alloc为例,描述如何分别使用三种方式进行源码探索
一、直接使用符号断点
直接下alloc的符号断点。
-
选择断点Symbolic Breakpoint
image.png
-
在输入符号断点名称中,符号位置输入alloc
image.png
以下为alloc符号断点处的堆栈调用信息,从下图中可以看到alloc位于libohjc.A.dylib,当调用[LGPerson alloc]时,会调用[NSObject alloc],并且下一步是调用libohjc.A.dylib中的_objc_rootAlloc方法。
![](https://img.haomeiwen.com/i20589734/c00e17e5d87e6961.png)
二、使用control + step into的方式
在[LGPerson alloc]时下个断点,当程序运行到此处时,按住control键,选择单步调试的step into。此时会显示以下内容:
![](https://img.haomeiwen.com/i20589734/93b19b15dfb45d86.png)
可以看到,此时调用了libobjc.A.dylib库中objc_alloc方法。再objc_alloc以符号断点的方式继续下一步探索。
三、汇编方法
Xcode 工具栏选择 Debug --> Debug Workflow --> Always Show Disassembly,这个选项表示始终显示反汇编 ,即通过汇编跟流程。
![](https://img.haomeiwen.com/i20589734/4afa83285fb70790.png)
当程序运行到[LGPerson alloc]时,堆栈调用信息如下,找到堆栈信息中的callq objc_alloc
![](https://img.haomeiwen.com/i20589734/b0a9d22352be2413.png)
可以看到,此时调用了libobjc.A.dylib库中objc_alloc方法。再objc_alloc以符号断点的方式继续下一步探索。
至此,我们已经了解了三种源码探索的方式,后续将在探索的过程中使用这三种方式。
网友评论