美文网首页
iOS-底层原理 01:源码探索方法

iOS-底层原理 01:源码探索方法

作者: 没有昵称的昵称没有 | 来源:发表于2020-09-23 13:19 被阅读0次

    本文旨在介绍如何查找到 \color{red}{函数}所属的\color{red}{源码库}。有以下三种方法,以alloc为例介绍。

    1. \color{red}{符号断点}跟流程

    • alloc打断点方式

      • Xcode左上角位置,如图所示:


        image.png
      • 在符号断点输入alloc
        alloc断点
    • 在ViewController中的LGPerson处断点
      注意:在走到alloc断点之前,需要关闭上面新增的符号断点,原因是因为alloc的调用有很多,如果开启了就不能准确的定位到LGPersonalloc方法。

      LGPerson断点
      • 断点打开状态如图所示:


        断点开
      • 断点关闭状态


        断点关闭
    • Xcode运行程序,断在LGPerson处,然后打开alloc 断点

      • 再点击继续运行


        继续运行

        然后可以看出alloc符号断点断住的堆栈调用情况,如图所示:


        alloc符号堆栈调用图

    从上图可知alloc是调用了底层libobjc.A.dylib库的_objc_rootAlloc函数。

    2. 按住control+step into寻找

    • 同方法1一样在LGPerson处断点,关闭alloc断点,重新运行程序,断点停在LGPerson处。
    • 按住control键,选择 step into

      进入后可看到如图所示:
      image.png
    • 参考方法1添加objc_alloc断点符号,可以看到符号断点显示了in libobjc.A.dylib内容。由此我们已经找到了底层库名称
      image.png
    • 点击继续运行,就找到了libobjc.A.dylib库,而且看到了底层调用了更深一级的_objc_rootAllocWithZone。
      image.png

    3. 汇编查找

    • 同方法1一样,保留[LGPerson alloc]断点,移除符号断点。Xcode开启运行,程序到达[LGPerson alloc]断点。
    • 在顶部文件导航栏打开Debug -> Debug Workflow -> Always show Disassembly。这个选项表示始终显示反汇编。如图所示:
      反汇编步骤
      按下图中2种方式都可找到libobjc.A.dylib底层库
      image.png
    • 最后查找到libobjc.A.dylib底层库

    以上就是源码探索方式的三种方法!
    源码探索方法介绍完毕,接下来就是下载源码。进入源码地址 ,下载 objc4-781.tar.gz

    相关文章

      网友评论

          本文标题:iOS-底层原理 01:源码探索方法

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