OC底层原理01:查找源码有三种方式
前言
本文主要介绍下源码探索的三种方法:
1、符号断点直接跟流程
2、通过按住 control+step into
3、汇编跟流程
下符号断点的形式直接跟流程
- 切换到
Show the breakpoing navigator
栏,打击左下角“+”
号create a breakpoint
创建一个断点
- 添加要查看的符号
alloc
- 设置地址断点,并取消之前设置的符号断点4,以便执行目标行,因为系统调用alloc的方法有很多,你不知道什么时候能执行到目标位置
command + R
编译并运行工程,当代码执行到3时,将符号断点4选中,查看执行的底层源码
通过摁住control - step into
command + R
编译并运行工程,代码执行到目标行,按住control + step into
单步运行箭头
- 按上面的方式,进入汇编可得下图:
注:jmpq是设么意思?
jmpq 就是jmp 指令。q是gnu汇编的用法。q表示跳转到64位地址。l表示32位地址。
- 然后打一个
objc_alloc
的符号断点,跳转到汇编代码可得下图:
由上图可知objc_alloc
是在libobjc.A.dylib
这个动态链接库上
注:.dylib是OSX上的动态库扩展
查看运行时的汇编代码
Xcode
点击Debug->Debug Workflow->Alway Show Disassembly
查看运行时的汇编代码
- 运行成功后的汇编代码如下
可知底层调用的方法是objc_alloc
注:callq:调用函数的意思,即调用函数时的压栈出栈
- 在下一个符号断点
objc_alloc
,继续执行和上面的就一样了
总结
由上面的方法我们可知 alloc
底层调用的是 objc_alloc
,所在的位置是libobjc.A.dylib
这个动态链接库,用一张流程图总结:
- Post title:OC底层原理01:查找源码有三种方式
- Post author:张建
- Create time:2020-09-03 01:35:35
- Post link:https://redefine.ohevan.com/2020/09/03/OC底层原理/OC底层原理01:查找源码有三种方式/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.