swift进阶一:源码编译
2020-12-05 本文已影响0人
markhetao
从今天开始,进入swift学习篇章。
想了解
OC底层原理,可查看👉 OC底层原理 学习大纲
本系列 swift进阶 学习大纲
编译环境
- Xcode版本:
12.0,macOS版本:10.15.4- 安装
VSCode- 安装
Homebrew(👉官网地址):/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"- 安装
cmake:brew install cmake- 安装
njnia:brew install cmake njnia
友情提示: 编译后的swift,需要50-60G空间,可选择在移动硬盘中编译
1. 下载源码
swift是开源语言,所以我们可以在github上下载最新源码。👉 swift官方地址
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
-
注意:请下载
匹配自己的Xcode版本的release源码版本。
2. update-checkout
在swift的根目录下,执行如下命令:
./swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone
-
注意:这一步非常重要。因为
update-checkout会clone编译swift相关库,不然后面编译swift源码时一定失败。
3. 编译
使用njnia进行编译。
./swift/utils/build-script -r --debug-swift-stdlib --lldb
4. 使用VSCode调试Swift
-
打开
VSCode,搜索并安装CodeLLDB
image.png
-
打开
swift文件夹(根文件夹)
image.png
-
添加
json文件
image.png
注意:需要修改program的文件路径为自己的路径
(build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift)
如果
Run处看不到这个Debug框:
- 请确保
VSCode已打开swift文件夹- 点击
show展示debug配置,在弹出的选择框中,点击add configuration...选项即可。
image.png
-
点击箭头,运行Debug环境
如果没配置
program,可能看到下面提示,修改一些launch.json的program路径即可
image.png
-
run起来后,会进入断点。点击继续运行:
image.png
- 可以看到
swift已成功运行。
image.png
5. 配置断点信息
我们先尝试一下断点:
- 按照
目录找到swift->stdlib->public->core->Sequence.swift文件,- 搜索
forEach {,鼠标左键点击718行,加入断点。- 在下面的
TERMINAL中输入测试代码:(遍历打印[1,2,3]数组元素)[1,2,3].forEach{ print($0) }
输完后,回车。 可以看到进入了断点:
image.png
- 发现
Local中,没有任何断点信息。
image.png
解决方法:
- 打开
VSCode的lldb文件夹:~/.vscode/extensions/vadimcn.vscode-lldb-1.6.0/lldb/bin/
image.png
- 打开
swift编译文件的lldb文件夹:【swift编译根目录】/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/lldb-macosx-x86_64/bin
image.png
- 将编译好的
swift的lldb的bin文件夹内容全部拷贝到VSCode的lldb的bin文件夹中。(重名文件全部选择替换)
image.png
- 将编译好的
swift的lldb的bin文件夹中的lldb(黑色的可执行文件),拷贝到VSCode的lldb的lib文件夹中(注意是lib文件夹)
image.png
- 在
VSCode的lldb的lib文件中,删除原liblldb.dylib文件,将黑色的lldb文件,重命名为liblldb.dylib:
image.png
- 重新
run,放过第一次断点,进入forEach断点:
image.png
Xcode的编译方式:(详细流程,请参考👉 swift官方文档)ps: 未亲测,仅记录下
- 要在 Xcode 中打开 Swift 项目,请打开
/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。它将为所有可用目标自动创建很多方案。常见的调试流程将涉及:- 选择
swift scheme。- 调出
scheme编辑器(⌘⇧<)。- 选择
Arguments选项卡,然后单击+。- 添加
命令行选项,这个根据自行需求设置,如果没有特殊需求,正常编译- 关闭
scheme编辑器。编译并运行。
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png