可编译版本
前言
从源码的角度分析、学习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源码了。
网友评论