Runtime 開篇

可編譯版本

objc-709

前言

從源碼的角度分析、學(xué)習(xí)iOS Runtime,這是第一篇,介紹編譯和調(diào)試 Runtime源碼

下載源碼

下載

前往源碼地址下載最新的Runtime源碼,本文使用的是

objc4-709版本

解壓

雙擊下載好的obc4-709.tar.gz解壓得到如下圖的文件


雙擊打開objc.xcodeproj

創(chuàng)建調(diào)試Target

創(chuàng)建target

創(chuàng)建一個 command line target 命名為 objc-debug

添加依賴

將靜態(tài)庫工程objc添加為objc-debug的依賴,并在Link Binary With Libraries中添加libobjc.A.dylib

編譯

cmd+B編譯,出現(xiàn)編譯錯誤sys/reason.h

創(chuàng)建頭像文件目錄

objc4-709目錄中創(chuàng)建include目錄,并在objc-debugobjc的Target中。Build Settings>Search Paths>Header Search Paths 添加 $(SRCROOT)/include

下載缺失頭文件

使用Google搜索reason.h site:opensource.apple.com,百度不行。由于reason.hsys目錄下,所以在include目錄中創(chuàng)建sys目錄,并將reason.h放入sys目錄中,重新編譯。

以同樣的方式下載并添加到include目錄中,繼續(xù)編譯

以同樣的方式下載并添加到include目錄中,繼續(xù)編譯

以同樣的方式下載并添加到include目錄中,繼續(xù)編譯

把所有需要的頭文件都加入include目錄中。

修改部份頭文件中的定義

修改CrashReporterClient.h 添加 #define LIBC_NO_LIBCRASHREPORTERCLIENT

修改objc-os.h#include "objc-config.h"下面添加#include <pthread/qos_private.h>

編譯出現(xiàn)以下錯誤

Order File中添加$(SRCROOT)/libobjc.order

繼續(xù)編譯出現(xiàn)以下錯誤

解決方式是在Other Linker Flags中刪除-lCrashReporterClient

編譯成功

調(diào)試

通過修改部份代碼,調(diào)整設(shè)置終于可以調(diào)試了。在NSObject.mm中添加如下斷點。

結(jié)語

通過一系列的調(diào)整,就可以調(diào)試runtime源碼了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容