編譯環(huán)境
- MacOS Big Sur 11.0.1
- Xcode 12.2
- Python 2.x
- brew install cmake ninja
編譯步驟
準(zhǔn)備工作
新建一個(gè)文件夾蒜绽,命名為
swift-source
由于拉取資源過(guò)程中,需要訪問(wèn)外網(wǎng),所以需要梯子(各位童鞋自行解決)
第一步:clone swift源碼
這里編譯的是swift-5.3.1-Release
〉≡耄可以自行在官網(wǎng)找到對(duì)應(yīng)的分支,需要注意的是:swift源碼版本需要與Xcode
版本匹配(官方編譯文檔有說(shuō)明)
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
第二步:update-checkout
這步主要是clone
編譯swift相關(guān)的庫(kù)
,否則在編譯時(shí)一定會(huì)失敗晤柄,這步很關(guān)鍵!(編譯過(guò)程會(huì)很長(zhǎng)妖胀,建議休息時(shí)間編譯)
./swift/utils/build-script -r --debug-swift-stdlib --lldb
這里編譯需要注意一點(diǎn):文件的路徑盡量避免出現(xiàn)中文
芥颈,中文有很大的概率會(huì)報(bào)錯(cuò)
第三步:采用ninja編譯
編譯過(guò)程可以使用ninja,也可以使用Xcode赚抡,但是Xcode編譯之后的支持性不是太好爬坑,所以這里采用ninja編譯
./swift/utils/build-script -r --debug-swift-stdlib --lldb
第四步:使用VSCode調(diào)試Swift
-
首先,在VSCode中安裝插件
- 添加配置文件
launch.json
涂臣,并修改
需要注意的是program
的路徑需要與你編譯的文件路徑一致
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
-
點(diǎn)擊
Debug
運(yùn)行盾计,斷住
然后過(guò)掉斷點(diǎn)
看到以下結(jié)果就是運(yùn)行成功了
-
然后切換至終端赁遗,我們可以開(kāi)始源碼調(diào)試?yán)病?/p>
-
在終端中輸入以下代碼(也可以從swift文件拷貝)
- 源碼中搜索
swift_allocObject
(這個(gè)在后面文章會(huì)講解,僅作為調(diào)試的例子)岩四,加上斷點(diǎn)
- 繼續(xù)在終端輸入
var t = CJLTeacher()
,回車
-
這樣,我們就可以愉快的調(diào)試的Swift源碼啦剖煌,??ヽ(°▽°)ノ?