ios 底层原理 :探索源码的三种方式

本文主要介绍探索源码的三种方法

    1. 符号断点直接跟流程
    1. 通过按住 control + step into
    1. 汇编跟流程

下面详细讲解如何查找到函数所在的源码库,以 alloc 为例

1.符号断点直接跟流程

  • 通过下 alloc 符号断点

    • 选择断点symbolic Breakpoint


      F6408E77-E135-47FA-AE89-2C473F3236FF.png
  • 符号中输入 alloc


    C557AA09-F029-4258-B5A8-A61E479560F2.png
  • main中的YXPersonal加一个断点
    在走这一部分断点之前,需要关闭上面新增的符号断点,因为系统层面也会调用很多次 alloc,如果不关闭的话就不能准确定位到我们要研究的 YXPersonal 的 alloc


    69C550B6-29CB-439D-BA92-19E280F4084D.png
  • 以下为alloc 符号断点处的堆栈情况,可以看出alloc 源码位于libobjc.A.dylib库(需要去苹果开源网站下载 objc 源码进行探索)


    DF75EBF1-9604-470A-BFF3-5B71079E4800.png

2.通过按住 control + step into

  • main 中的 YXPersonal 处加一个断点


    D2FEC6BB-97AF-41E5-A365-EF30FDAD3CA1.png
  • 按住 control 键,选择 step into 键


    96C7DF97-F74C-47FA-B55C-3E65FE86D3A9.png
  • 进去后,显示为以下内容


    96B87C7A-ECB4-4E0B-8770-A601607D2125.png
  • 在下一个 objc_alloc 符号断点,就可以看到相应库信息


    image.png

3.汇编跟流程

  • 在 main 中 YXPersonal 处下一个断点


    DCE02E3E-1100-4C8B-B1B8-86A18C423152.png
  • 工具栏 Debug -> DebugWorkFlow -> Always Show Disassembly


    0EF44AA3-62F6-45D0-86D2-A0E78FE8F7F0.png
  • 在 callq 处打一个断点,step into 进入


    3C9EA259-4AEA-4249-8154-C74821A26EF9.png
7785C1E0-DC87-49E0-9983-2A0889A0B369.png
  • 同样通过 objc_alloc符号断点,得知源码库所在位置

源码地址:
总地址
直接地址
搜索 objc,选择对应版本

你可能感兴趣的:(ios 底层原理 :探索源码的三种方式)