編譯環(huán)境
- macOS Big Sur 11.1
- Xcode 12.2
- Python 2.x
- brew install cmake ninja
- VSCode
編譯步驟
準(zhǔn)備工作
- 新建一個(gè)文件夾惹骂,命名為
swift-source
- 由于拉取資源需要訪問(wèn)外網(wǎng)沐鼠,所以需要梯子(沒(méi)有也行护蝶,可能慢點(diǎn))
第一步: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/update-checkout --tag swift-5.3.1-RELEASE --clone
注意:文件的
路徑避免出現(xiàn)中文
十嘿,中文有很大的概率會(huì)報(bào)錯(cuò)
第三步:采用ninja編譯
編譯過(guò)程中既可以使用ninja
,也可以使用Xcode
進(jìn)行編譯岳锁。但是Xcode編譯后的支持性不是特別好
绩衷,所以這里就使用了ninja
來(lái)作為編譯工具。
./swift/utils/build-script -r --debug-swift-stdlib --lldb
編譯成功
編譯成功時(shí)包的大小如下入所示
第四步:使用VSCode調(diào)試swift
- 首先,在VSCode中安裝
codelldb
插件
- 添加配置文件
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}"
}
]
}
如果找不到
launch.json
文件勿决,把swift-source
整個(gè)文件夾拖進(jìn)VSCode
中,就會(huì)有launch.json
文件了
- 點(diǎn)擊
Debug
運(yùn)行招盲,斷住
然后過(guò)掉斷點(diǎn)
看到以下結(jié)果就表示運(yùn)行成功了
- 然后切換至終端低缩,我們可以開始正常的源碼調(diào)試了
- 在終端輸入以下代碼(也可以從swift文件中直接拷貝)
- 源碼中搜索
swift_allocObject
,加上斷點(diǎn)
- 繼續(xù)在終端輸入
var sun = Sunrise()
曹货,回車
這樣咆繁,我們就可以愉快的調(diào)試swift源碼了。