IOS底层(二): 源码探索
我们做项目时候, 我们希望快速查到指定源码, 所以快速的找到"指定"源码非常重要
拿一份普普通通项目举例

例如 我们想知道 alloc方法在哪个源码里面

control + 点击
进入

在这里我们发现无从下手。 为什么呢? 我们找的姿势不对
比如我们想找 alloc
源码
方法1 符号断点
选择断点 → 点击左下角" +
" → Symbolic Breakpoint

这里比如我们想知道alloc
源码位置, 那么就输入alloc

选完运行, 会看到这样

哪个是我们想要找的呢? 因为程序中很多地方都有用到alloc
所以, 我们还要多加个断点
现在我们先要定位的alloc 处加断点

运行程序, 断在普通断点的地方之后, 我们再加符号断点, 当然我们也可以通过打开关闭符号断点进行此操作

我们点击继续运行, 可看到


上面图片可以看出alloc
在libobjc.A.dylib
库中, 苹果开发者相应的开源网址下载对应库源码进行探索即可
方法2 Step into点击查找
还是拿alloc举例 先点一个普通断点, 运行, 断点断到这里

通过control
+ step into
继续查找

点击之后显示

这时候我们再加个objc_alloc
符号断点, 点击Continue program execution
继续执行

可以看到进入了libobjc.A.dylib
中的objc_alloc
函数,由此可知alloc方法的源码在libobjc.A.dylib
库中。
方法3 汇编方法
老地方加断, 断到这里

依次Debug
→Debug Workflow
→ Always Show Disassembly


通过control
+ step into
到 objc_alloc

再点击control
+ step into
可看到

这时候我们再加个objc_alloc
符号断点, 点击Continue program execution
继续执行

可以看到进入了libobjc.A.dylib
中的objc_alloc
函数,也一样知道alloc方法的源码在libobjc.A.dylib
库中。