美文网首页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