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