Swift-进阶 01:Swift源码编译

简介: Swift-进阶 01:Swift源码编译

编译环境


  • MacOS Big Sur 11.0.1
  • 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相关的库,否则在编译时一定会失败,这步很关键!(编译过程会很长,建议休息时间编译)

./swift/utils/build-script -r --debug-swift-stdlib --lldb

这里编译需要注意一点:文件的路径尽量避免出现中文,中文有很大的概率会报错


第三步:采用ninja编译


编译过程可以使用ninja,也可以使用Xcode,但是Xcode编译之后的支持性不是太好,所以这里采用ninja编译

./swift/utils/build-script -r --debug-swift-stdlib --lldb


第四步:使用VSCode调试Swift


  • 首先,在VSCode中安装插件

image.png

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


image.png

需要注意的是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}"
        }
   ]
}

点击Debug运行,断住

image.png

然后过掉断点

image.png

看到以下结果就是运行成功了

image.png

然后切换至终端,我们可以开始源码调试啦。


  • 在终端中输入以下代码(也可以从swift文件拷贝)

image.png源码中搜索swift_allocObject(这个在后面文章会讲解,仅作为调试的例子),加上断点

image.png继续在终端输入var t = CJLTeacher(),回车

image.png

这样,我们就可以愉快的调试的Swift源码啦,✿✿ヽ(°▽°)ノ✿



相关文章
|
7月前
|
安全 编译器 Swift
【Swift开发专栏】Swift的编译优化与构建配置
【4月更文挑战第30天】Swift编译优化与构建配置对开发效率和应用性能至关重要。编译优化包括不同级别的优化、函数内联、泛型特化、尾递归优化、死代码消除和链接时优化。在Xcode的"Build Settings"中可调整相关标志。构建配置涉及Debug与Release模式、自定义配置、条件编译、构建设置和脚本。开发时,应适时测试、选择适当优化级别、避免过度优化,并利用条件编译区分不同版本的代码。有效管理构建设置可提升开发质量和性能。
106 0
|
存储 编译器 Swift
Swift-进阶 08:枚举enum
Swift-进阶 08:枚举enum
630 1
Swift-进阶 08:枚举enum
|
数据安全/隐私保护 Swift
Swift-进阶 11:访问控制权限
Swift-进阶 11:访问控制权限
324 0
Swift-进阶 11:访问控制权限
|
Swift C++
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
354 0
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
|
存储 编译器 开发者
Swift-进阶 09:闭包(二)逃逸闭包 & 非逃逸闭包
Swift-进阶 09:闭包(二)逃逸闭包 & 非逃逸闭包
549 0
Swift-进阶 09:闭包(二)逃逸闭包 & 非逃逸闭包
|
存储 Swift C++
Swift-进阶 09:闭包(一)使用&捕获原理
Swift-进阶 09:闭包(一)使用&捕获原理
499 0
Swift-进阶 09:闭包(一)使用&捕获原理
|
存储 JSON HandyJSON
Swift-进阶 07:Mirror源码解析
Swift-进阶 07:Mirror源码解析
421 0
Swift-进阶 07:Mirror源码解析
|
JSON 编译器 Swift
Swift-进阶 06:反射Mirror & 错误处理
Swift-进阶 06:反射Mirror & 错误处理
262 0
Swift-进阶 06:反射Mirror & 错误处理
|
存储 编译器 API
Swift-进阶 05:内存管理 & Runtime
Swift-进阶 05:内存管理 & Runtime
298 0
Swift-进阶 05:内存管理 & Runtime
|
存储 编译器 Swift
Swift-进阶 04:指针
Swift-进阶 04:指针
241 0
Swift-进阶 04:指针