以跟蹤對象alloc方法的實現(xiàn)為例,介紹查找底層源碼庫的三種方法:
- 1似踱、通過按住
control
+step into
- 2、
符號斷點
直接跟流程 - 3囚戚、匯編跟流程
1、通過按住control
+step into
-
main中的LGPerson處加一個斷點匾二,運(yùn)行程序察藐,會斷在LGPerson位置
-
按住 control鍵舟扎,選擇 step into鍵
-
進(jìn)去后譬猫,顯示為以下內(nèi)容
- 再下一個objc_alloc符號斷點邦泄,符號斷點后顯示了 objc_alloc所在的源碼庫,該方法在
libobjc.A.dylib
庫中
2肌索、符號斷點
直接跟流程
-
選擇Symbolic Breakpoint诚亚,添加一個alloc符號斷點午乓,添加后將斷點先設(shè)置為disable
-
LGPerson處加一個斷點
-
運(yùn)行程序后將會斷在
LGPerson *p1 = [LGPerson alloc];
,此時打開剛才添加的alloc
符號斷點梢灭,點擊繼續(xù)執(zhí)行
從上面可以看出, 源碼在libobjc.A.dylib
庫
3敏释、匯編跟流程
-
LGPerson處加一個斷點
-
xcode工具欄選擇
Debug --> Debug Workflow --> Always Show Disassembly
,這個選項表示始終顯示反匯編 钥顽,即通過匯編跟流程代碼執(zhí)行流程
-
運(yùn)行程序后將會斷在
LGPerson *p1 = [LGPerson alloc];
蜂大,按住control,點擊step into鍵兄墅,執(zhí)行到下圖的callq 察迟,對應(yīng) objc_alloc
-
按住control扎瓶,點擊 step into鍵進(jìn)入泌枪,看到斷點斷在objc_alloc部分
添加
objc_alloc
的符號斷點误证,得知源碼所在庫
Apple提供的源碼下載地址
-
https://opensource.apple.com
根據(jù)系統(tǒng)版本查找對應(yīng)的源碼愈捅,以mac 10.15為例: macOS --> 10.15 --> 選擇10.15 --> 搜索 objc -
https://opensource.apple.com/tarballs
根據(jù)源碼名稱搜索源碼,例如objc:直接搜索 objc --> objc4/ --> 選擇相應(yīng)的objc的版本 -
https://github.com/opensource-apple
github上的源碼