objc4-756.2源码调试

1,208 阅读1分钟

1.准备源码及所需文件

1.1 可前往官网下载 objc4-756.2源码 ,下载后解压工程为下图所示:

objc4-756.2源码解压
1.2 所需文件如下图所示可在 opensource.apple 找到。

调试所需文件

2.开始调试

2.1 创建调试target

2.2 添加依赖(目的为了使创建的target调用本地源码生成的库文件)

将静态库工程 objc 添加为 objc-debug 的 Dependenciesg,在 Link Binary With Libraries 中添加 libobjc.A.dylib


command+B开始编译

2.3 解决编译错误


Error 1

将objc,objc-trampolines,objc-debug 3个target中的 Build Settings 选项 Architectures 中的值切换为 Standard Architectures(64-bit Intel) 如下图所示:

command+B


Error 2 缺失文件sys/reason.h

在工程目录中创建 Include 文件夹,在工程的 Header Serach Paths中添加搜索路径 $(SRCROOT)/Include

使用 Google 在opensource.apple.com中定向搜索reason.h site:opensource.apple.com。在Include目录中创建sys目录,并将reason.h放入sys目录中。
command+B


Error 3 缺失文件mach-o/dyld_priv.h
Error 4 缺失文件os/lock_private.h
Error 5 缺失文件os/base_private.h
Error 6 缺失文件pthread/tsd_private.h
Error 7 缺失文件System/machine/cpu_capabilities.h
Error 8 缺失文件os/tsd.h
Error 9 缺失文件pthread/spinlock_private.h
Error 10 缺失文件System/pthread_machdep.h
Error 11 缺失文件CrashReporterClient.h
注意添加CrashReporterClient.h文件后 需添加 #define LIBC_NO_LIBCRASHREPORTERCLIENT 否则报错

Error 12 缺失文件objc-shared-cache.h
Error 13 缺失文件_simple.h
Error 14 缺失文件Block_private.h
这些缺失文件与sys/reason.h补全方法一致添加至Include目录下即可 command+B


Error 15

在objc target->build Setting->Link->Order File处添加$(SRCROOT)/libobjc.order

在build Setting->Linking->Other Linker Flags中删除-lCrashReporterClient

command+B


Error 16

在objc target->Build Phases->Run Script(markgc)里的内容macosx.internal改为macosx

command+B


Error 17

在objc target->build Setting->Text-Based API中
1.把Text-Based InstallAPI Verification Model里的值改为Errors Only
2.清空 Other Text-Based InstallAPI Flags中的值
command+B


2.4 编译成功

编译成功后 我们jumpalloc进入源码 上断点 Command + R运行 跳转到如下图所示,则证明配置成功!