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

本文旨在介绍如何查找到 \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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。