本文主要介紹探索源碼的三種方法
- 符號斷點(diǎn)直接跟流程
- 通過按住 control + step into
- 匯編跟流程
下面詳細(xì)講解如何查找到函數(shù)所在的源碼庫,以 alloc 為例
1.符號斷點(diǎn)直接跟流程
-
通過下 alloc 符號斷點(diǎn)
-
選擇斷點(diǎn)symbolic Breakpoint
F6408E77-E135-47FA-AE89-2C473F3236FF.png
-
-
符號中輸入 alloc
C557AA09-F029-4258-B5A8-A61E479560F2.png -
main中的YXPersonal加一個(gè)斷點(diǎn)
在走這一部分?jǐn)帱c(diǎn)之前,需要關(guān)閉上面新增的符號斷點(diǎn),因?yàn)橄到y(tǒng)層面也會調(diào)用很多次 alloc,如果不關(guān)閉的話就不能準(zhǔn)確定位到我們要研究的 YXPersonal 的 alloc
69C550B6-29CB-439D-BA92-19E280F4084D.png -
以下為alloc 符號斷點(diǎn)處的堆棧情況,可以看出alloc 源碼位于libobjc.A.dylib庫(需要去蘋果開源網(wǎng)站下載 objc 源碼進(jìn)行探索)
DF75EBF1-9604-470A-BFF3-5B71079E4800.png
2.通過按住 control + step into
-
main 中的 YXPersonal 處加一個(gè)斷點(diǎn)
D2FEC6BB-97AF-41E5-A365-EF30FDAD3CA1.png -
按住 control 鍵,選擇 step into 鍵
96C7DF97-F74C-47FA-B55C-3E65FE86D3A9.png -
進(jìn)去后,顯示為以下內(nèi)容
96B87C7A-ECB4-4E0B-8770-A601607D2125.png -
在下一個(gè) objc_alloc 符號斷點(diǎn),就可以看到相應(yīng)庫信息
image.png
3.匯編跟流程
-
在 main 中 YXPersonal 處下一個(gè)斷點(diǎn)
DCE02E3E-1100-4C8B-B1B8-86A18C423152.png -
工具欄 Debug -> DebugWorkFlow -> Always Show Disassembly
0EF44AA3-62F6-45D0-86D2-A0E78FE8F7F0.png -
在 callq 處打一個(gè)斷點(diǎn),step into 進(jìn)入
3C9EA259-4AEA-4249-8154-C74821A26EF9.png

7785C1E0-DC87-49E0-9983-2A0889A0B369.png
- 同樣通過 objc_alloc符號斷點(diǎn),得知源碼庫所在位置










