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