美文网首页iOS 底层原理 iOS 进阶之路
OC底层原理一:定位源码(欢迎来到底层世界)

OC底层原理一:定位源码(欢迎来到底层世界)

作者: markhetao | 来源:发表于2020-09-10 14:34 被阅读0次

OC底层原理 学习大纲

欢迎来到底层世界,让我们一起打开通往底层世界的大门。

入门的三种方式:

查找指定函数底层源码: 本文以Person对象的alloc函数为例

  1. 符号断点跟流程
  2. control + step into
  3. 汇编查找

方法一: 符号断点跟流程

tips: 断点高亮色启动,鼠标左键再点一下会置灰,表示取消断点

  • 入口断点
    找到Person调用alloc的位置,鼠标左键点击编辑器左侧行数即可
手动断点.png
  • 符号断点

step1: Xcode左上角切换到断点调试面板

断点调试面板.png

step2: Xcode左下角点击+号,点击Symbolic Breakpoint

符号断点.png

step3: 输入alloc,按键盘Enter键确认

alloc.png
  • 开始调试

step1: 将alloc符号断点置灰

alloc函数在很多地方被调用,在到达我们目标位置前,先置灰。

step2: Xcode开启运行,程序到达[Person alloc]断点后, 开启符号断点。

step3: 点击 Xcode日志栏的继续运行按钮

继续运行.png

可以看到alloc是调用了底层libobjc.A.dylib_objc_rootAlloc函数。

libobjc.A.dylib.png

恭喜你,你已成功找到底层入口

现在你可以选择进入下一篇章,**OC底层原理二:objc4-781编译环境** (真实的底层世界)


方法二:control + step into

step1: 同方法一一样,保留[Person alloc]断点,移除符号断点。

step2: 运行程序,进程停留在[Person alloc]断点处时,

setp3: 按住键盘control键+鼠标点击 Xcode日志栏的step into按钮

进入.png

进去后可以看到objc_alloc:

objc_alloc.png

step4: 加入objc_alloc符号断点(参照方法一符号断点操作流程,将内容改为objc_alloc

image.png

(其实我们已经看到符号断点显示了in libobjc.A.dylib内容。我们已经找到了底层库名称)

step5:点击 Xcode日志栏的继续运行按钮

继续运行.png

就找到了libobjc.A.dylib库,而且看到了底层调用了更深一级的_objc_rootAllocWithZone

关于_objc_rootAllocWithZone_objc_rootAlloc的关系,后面解析alloc时,会详细讲到。

image.png
libobjc.A.dylib.png

方法三: 汇编查找

step1: 同方法一一样,保留[Person alloc]断点,移除符号断点。Xcode开启运行,程序到达[Person alloc]断点后。

step2: 在顶部文件导航栏打开Debug -> Debug Workflow -> Always show Disassembly
这个选项表示始终显示反汇编

image.png

按图中2种方式都可找到libobjc.A.dylib底层库

image.png libobjc.A.dylib.png

恭喜你,已掌握了三种寻找底层的方法

让我们进入下一篇章,OC底层原理二:objc4-781编译环境** (真实的底层世界)

相关文章

网友评论

    本文标题:OC底层原理一:定位源码(欢迎来到底层世界)

    本文链接:https://www.haomeiwen.com/subject/jbguektx.html