本文主要介绍探索源码的三种方法
- 符号断点直接跟流程
- 通过按住 control + step into
- 汇编跟流程
下面详细讲解如何查找到函数所在的源码库,以 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
- 同样通过 objc_alloc符号断点,得知源码库所在位置
网友评论