編譯環(huán)境
- macOS Big Sur 11.1
- Xcode 12.2
- Python 2.x
- brew install cmake ninja
- VSCode
編譯步驟
準(zhǔn)備工作
- 新建一個(gè)文件夾,命名為
swift-source - 由于拉取資源需要訪問外網(wǎng),所以需要梯子(沒有也行,可能慢點(diǎn))
第一步:clone swift 源碼
這里編譯的是swift-5.3.1-Release,可以自行在官網(wǎng)找到對(duì)應(yīng)的分支,需要注意的是:swift源碼版本需要與Xcode版本匹配(官方編譯文檔有說明)。
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git

image.png
第二步:update-checkout
這步主要是clone編譯swift相關(guān)的庫,否則在編譯時(shí)一定會(huì)失敗,這步很關(guān)鍵?。ň幾g過程會(huì)很長,建議休息時(shí)間編譯)
./swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone
注意:文件的
路徑避免出現(xiàn)中文,中文有很大的概率會(huì)報(bào)錯(cuò)

update-checkout
第三步:采用ninja編譯
編譯過程中既可以使用ninja,也可以使用Xcode進(jìn)行編譯。但是Xcode編譯后的支持性不是特別好,所以這里就使用了ninja來作為編譯工具。
./swift/utils/build-script -r --debug-swift-stdlib --lldb
編譯成功
編譯成功時(shí)包的大小如下入所示

image.png
第四步:使用VSCode調(diào)試swift
- 首先,在VSCode中安裝
codelldb插件

image.png
- 添加配置文件
launch.json,并修改

image.png
需要注意的是program的路徑需要與你編譯的文件路徑一致

image.png
{
"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}"
}
]
}
如果找不到
launch.json文件,把swift-source整個(gè)文件夾拖進(jìn)VSCode中,就會(huì)有launch.json文件了

image.png
- 點(diǎn)擊
Debug運(yùn)行,斷住

然后過掉斷點(diǎn)

image.png
看到以下結(jié)果就表示運(yùn)行成功了

image.png
- 然后切換至終端,我們可以開始正常的源碼調(diào)試了
- 在終端輸入以下代碼(也可以從swift文件中直接拷貝)

image.png
- 源碼中搜索
swift_allocObject,加上斷點(diǎn)

image.png
- 繼續(xù)在終端輸入
var sun = Sunrise(),回車

image.png
這樣,我們就可以愉快的調(diào)試swift源碼了。