编译环境
- macOS Catalina 10.15.7
- Xcode 12.2
- Python 2.x
- brew install cmake ninja
编译步骤
- 新建一个swift-source文件夹
- 拉取资源过程建议使用梯子,速度较快
第一步:clone swift源码
这里编译的是swift-5.3.1-Release。可以自行在官网找到对应的分支,需要注意的是:swift源码版本需要与Xcode版本匹配(官方编译文档有说明)
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
第二步:update-checkout
这步主要是clone编译swift相关的库(过程很长,3小时起跳)
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
第三步:编译
编译过程可以使用ninja,也可以使用Xcode,但是Xcode编译之后的支持性不是太好,所以这里采用ninja编译
./swift/utils/build-script -r --debug-swift-stdlib --lldb
第四步:使用VSCode调试Swift
- 首先安装插件
CodeLLDB
2.配置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}"
}
]
}
3.点击Debug
运行后断住,继续点击剪头过掉断点
4.看到以下结果就代表成功了
5.切换到VScode终端代码进行调试
总结:
- 编译过程耗时较长,建议大家多尝试,本人尝试了很多次才成功,同一个文件可能最终结果不相同,目前还未发现原因。。。本人最终还是使用了别人的第二步版本,自己执行的第三步,第一次报错,第二次成功,就很奇妙 - -
- 使用VSCode调试源码的目的主要是为了看清Swift底层工作原理,例如上图初始化的过程中底层实际是走到
_swift_allocObject_
这个方法中,方便大家自行探索