可编译版本
前言
从源码的角度分析、学习iOS Runtime,这是第一篇,介绍编译和调试 Runtime源码
下载源码
下载
前往源码地址下载最新的Runtime源码,本文使用的是
objc4-709版本
解压
双击下载好的obc4-709.tar.gz解压得到如下图的文件
双击打开
objc.xcodeproj
创建调试Target
创建target
创建一个 command line target 命名为 objc-debug
添加依赖
将静态库工程objc添加为objc-debug的依赖,并在Link Binary With Libraries中添加libobjc.A.dylib
编译
cmd+B编译,出现编译错误sys/reason.h
创建头像文件目录
在objc4-709目录中创建include目录,并在objc-debug和objc的Target中。Build Settings>Search Paths>Header Search Paths 添加 $(SRCROOT)/include
下载缺失头文件
使用Google搜索reason.h site:opensource.apple.com,百度不行。由于reason.h在sys目录下,所以在include目录中创建sys目录,并将reason.h放入sys目录中,重新编译。
以同样的方式下载并添加到include目录中,继续编译
以同样的方式下载并添加到include目录中,继续编译
以同样的方式下载并添加到include目录中,继续编译
把所有需要的头文件都加入include目录中。
修改部份头文件中的定义
修改CrashReporterClient.h 添加 #define LIBC_NO_LIBCRASHREPORTERCLIENT
修改objc-os.h 在#include "objc-config.h"下面添加#include <pthread/qos_private.h>
编译出现以下错误
在Order File中添加$(SRCROOT)/libobjc.order
继续编译出现以下错误
解决方式是在Other Linker Flags中删除-lCrashReporterClient
编译成功
调试
通过修改部份代码,调整设置终于可以调试了。在NSObject.mm中添加如下断点。
结语
通过一系列的调整,就可以调试runtime源码了。











网友评论