Swift進(jìn)階 01:Swift源碼編譯

編譯環(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源碼了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容