本文旨在介绍如何查找到 所属的。有以下三种方法,以alloc
为例介绍。
1. 跟流程
-
alloc打断点方式
-
Xcode左上角位置,如图所示:
image.png - 在符号断点输入
alloc
alloc断点
-
-
在ViewController中的LGPerson处断点
LGPerson断点
注意:在走到alloc
断点之前,需要关闭上面新增的符号断点,原因是因为alloc
的调用有很多,如果开启了就不能准确的定位到LGPerson
的alloc
方法。
-
断点打开状态如图所示:
断点开 -
断点关闭状态
断点关闭
-
-
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 。
网友评论