注册
iOS

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

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

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

下面详细讲下这三种方法是如何查找到函数所在的源码库,以alloc为例

1、符号断点直接跟流程

  • 通过下alloc的符号断点

    • 选择断点Symbolic Breakpoint

      502e7768d39a29762b5a462f9eccc544.png

符号断点中输入 alloc

e31415b05adccd9fb6f1c023404d5c0b.png

main中的CJLPerson处 加一个断点
在走到这部分断点之前,需要关闭上面新增的符号断点,原因是因为alloc的调用有很多,如果开启了就不能准确的定位到CJLPerson的alloc方法

09d2280a3d50acc52c0c296b6267e5a0.png

以下为符号断点的关闭状态

289167e0b51c17f27fd456c104e10562.png

运行程序, 断在CJLPerson部分

  • 打开 alloc符号断点 ,断点状态为

    634cb23ee5cef9202f7084d39efb4c32.png

    继续执行

    081e5fd48ed5221537b2ffd30c69af46.png

    以下为alloc符号断点断住的堆栈调用情况,从下图可以看出 alloc 的源码位于libobjc.A.dylib库(需要去Apple 相应的开源网址下载 objc源码进行更深入的探索)

    6b88fc8431760f644e5cf325160f6892.png

    2、通过按住control+step into

    • main中的CJLPerson处 加一个断点,运行程序,会断在CJLPerson位置
  • 2b0129d130b208c568e61eaee132efec.png

  • 按住 control键,选择 step into ⬇️键

1c63cb2ddaedeb346b3e77c5cce3e960.gif

进去后,显示为以下内容

481516ec504494c50cd5a6dd75a978cf.png

再下一个objc_alloc符号断点,符号断点后显示了 objc_alloc所在的源码库
(需要去Apple 相应的开源网址下载 objc源码进行更深入的探索)

1a7ca161a7bf1a1759f9c67a38ebb0d0.png

3、汇编跟流程

main中的CJLPerson处 加一个断点,运行程序,会断在CJLPerson位置

264133e820e1a76a7913b2f225646074.png

xcode 工具栏 选择 Debug --> Debug Workflow --> Always Show Disassembly,这个 选项表示 始终显示反汇编 ,即 通过汇编 跟流程

f1d6054abccbfcff2ca2e64583aa1b3a.png

按住control,点击 step into ⬇️键,执行到下图的callq ,对应 objc_alloc

216cb6391d5138a914c31a11b7a3806c.png

  • 按住control,点击 step into ⬇️键进入,看到断点断在objc_alloc部分
  • caf913891b03ea32c94a0d6aaf701d33.png

  • 同样通过objc_alloc的符号断点,得知源码所在库
    (需要去Apple 相应的开源网址下载 objc源码进行更深入的探索)

  • 8c4c39fff607f87772820e6214119f03.png

作者:style_月月
链接:https://blog.csdn.net/lin1109221208/article/details/108425742
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册