本文主要介紹下源碼探索的三種方法
- 1、
符號斷點直接跟流程 - 2、通過
按住control+step into - 3、匯編跟流程
下面詳細(xì)講下這三種方法是如何查找到函數(shù)所在的源碼庫,以alloc為例
1、符號斷點直接跟流程
-
通過下
alloc的符號斷點-
選擇斷點
Symbolic Breakpoint
image -
符號斷點中輸入
alloc
image
-
-
main中的CJLPerson處 加一個斷點
在走到這部分?jǐn)帱c之前,需要關(guān)閉上面新增的符號斷點,原因是因為alloc的調(diào)用有很多,如果開啟了就不能準(zhǔn)確的定位到CJLPerson的alloc方法
image
以下為符號斷點的關(guān)閉狀態(tài)
image -
運行程序, 斷在CJLPerson部分
-
打開
alloc符號斷點,斷點狀態(tài)為
image -
繼續(xù)執(zhí)行
image
以下為alloc符號斷點斷住的堆棧調(diào)用情況,從下圖可以看出 alloc 的源碼位于libobjc.A.dylib庫(需要去Apple 相應(yīng)的開源網(wǎng)址下載 objc源碼進(jìn)行更深入的探索)
image
-
2、通過按住control+step into
-
main中的CJLPerson處 加一個斷點,運行程序,會斷在CJLPerson位置
image - 按住
control鍵,選擇step into??鍵
image -
進(jìn)去后,顯示為以下內(nèi)容
image - 再下一個
objc_alloc符號斷點,符號斷點后顯示了objc_alloc所在的源碼庫
(需要去Apple 相應(yīng)的開源網(wǎng)址下載 objc源碼進(jìn)行更深入的探索)
image
3、匯編跟流程
-
main中的CJLPerson處 加一個斷點,運行程序,會斷在CJLPerson位置
image -
xcode 工具欄 選擇
Debug-->Debug Workflow-->Always Show Disassembly,這個 選項表示 始終顯示反匯編 ,即 通過匯編 跟流程
image -
按住
control,點擊step into??鍵,執(zhí)行到下圖的callq ,對應(yīng) objc_alloc
image -
按住
control,點擊step into??鍵進(jìn)入,看到斷點斷在objc_alloc部分
image -
同樣通過
objc_alloc的符號斷點,得知源碼所在庫
(需要去Apple 相應(yīng)的開源網(wǎng)址下載 objc源碼進(jìn)行更深入的探索)
image
注意(以下是Apple 提供的源碼下載地址):
1、Apple 所有開源源碼匯總地址,根據(jù)相應(yīng)的版本查找對應(yīng)的源碼,以mac 10.15為例:macOS --> 10.15 --> 選擇10.15 --> 搜索 objc
2、Apple 比較直接的源碼下載地址,直接搜索想要下載的源碼名稱即可,例如objc:直接搜索 objc --> objc4/ --> 選擇相應(yīng)的objc的版本















