alloc探索的三种方法
2020-09-02 本文已影响0人
lkm_0bdc
- 按住 control -step into
- 符号断点形式直接跟流程
- 汇编查看跟流程
下面详细讲解三种方法是如何查询所在的
,这里是以alloc为例子。
按住 control -step into
因为模拟机是无法进行,我们需要真机运行。
首先我们需要打一个断点,然后按住,下方的箭头发生改变,点击箭头一直进入,就会看到alloc的源码位于libobjc.A.dylib(这里可以查看官方文档了解)。
![](https://img.haomeiwen.com/i16535935/94835c84732b84d0.png)
![](https://img.haomeiwen.com/i16535935/9599de71b95d1bb3.png)
![](https://img.haomeiwen.com/i16535935/63a551d5964f4435.png)
如果在已知跟踪条件
的情况下,我们可以直接使用符号断点(如果不清楚,可以看下面步骤),就会看到
。
![]()
符号断点形式直接跟流
在main中的LGPerson处加一个断点,走之前需要关闭上面新加的符号断点,因为alloc调用的地方比较多,不关闭的话,不能准确的定位到LGPerson 的alloc方法。
![](https://img.haomeiwen.com/i16535935/80541285d09f40bc.jpg)
输入
,如果不设置,将会违背已有的条件。
然后我们会看到很多的内容,这时候只需要过一个断点,就可以来到alloc的动态库。
从图中可以看出alloc的源码位于libobjc.A.dylib。
![](https://img.haomeiwen.com/i16535935/8a1f642c4eb235ef.png)
汇编查看跟流程
在main中的LGPerson处加一个断点,然后在上方进入汇编跟踪流,这个选项表示始终显示反汇编,直接定位到alloc的源码位于libobjc.A.dylib。
![](https://img.haomeiwen.com/i16535935/00e2eb86386f8e55.jpg)
![](https://img.haomeiwen.com/i16535935/f0b0d59e39f024c7.png)
过断点到objec_alloc的位置按住control + step into
![](https://img.haomeiwen.com/i16535935/805a324df26bd53c.png)
就可以在已知的情况下,通过符号断点知道源码所在库(需要去Apple开源objc源码下载进行了解)。
下面是Apple提供的源码下载地址
苹果开源源码汇总
这个地址直接通过搜索