编译调试swift5.7源码

news2024/12/25 9:05:25

环境:

  • 电脑:apple m1 pro
  • 系统:macOS13
  • Xcode: 14.2
  • Cmake: 3.25.1
  • Ninja: 1.11.1
  • sccache: 0.3.3
  • swift代码地址
  1. 新建一个文件夹(用于存放clone下来的swift源码),然后进入该文件夹。本例中是在终端执行了mkdir swift-project,然后执行cd swift-project/实现;
  2. 在终端中执行:git clone --branch swift-5.7.1-RELEASE https://github.com/apple/swift.git,目的是把swift的swift-5.7.1-RELEASE版本的代码clone下来;
  3. 在终端中执行:./swift/utils/update-checkout --tag swift-5.7.1-RELEASE --clone,目的是下载编译swift所需要的代码库,当看到如下图所示的信息时,说明下载成功了;
    在这里插入图片描述
  4. 安装编译工具(cmake、ninja、sccache):在终端上执行brew install cmake ninja sccache。(但是,这种方式安装的是这3个工具的最新版本,为了和本文环境对齐,所以可以参考这篇文章来通过brew安装指定版本)
  5. 在终端执行cd swift,目的是切到swift文件夹下;
  6. 在终端执行utils/build-script --xcode --release-debuginfo --debug-swift-stdlib --skip-build-benchmarks --swift-darwin-supported-archs "$(uname -m)" --sccache --skip-ios --skip-tvos --skip-watchos --bootstrapping=off,目的是生成包含来swift源码的xcode工程。但不幸的是,你会遇到这个错误(error: using unsupported Xcode version,如下图所示),解决方法很简单:在终端执行export SKIP_XCODE_VERSION_CHECK=1,即设置该环境变量。设置之后再次执行utils/build-script --xcode --release-debuginfo --debug-swift-stdlib --skip-build-benchmarks --swift-darwin-supported-archs "$(uname -m)" --sccache --skip-ios --skip-tvos --skip-watchos --bootstrapping=off
    在这里插入图片描述
    编译成功后,结果如下图。
    在这里插入图片描述
  7. 此时我们可以打开如下图所示的build文件夹,然后可以看到Swift.xcodeproj文件。
    在这里插入图片描述
  8. 我们用xcode打开Swift.xcodeproj文件,此时会弹出如下图所示的框,我们选择“automatically create schemes”,目的是让xcode给swift工程自动创建好可以编译的scheme。
    在这里插入图片描述
  9. 我们在该工程内直接创建一个我们自己的target,操作如下3张图所示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  10. 给我们创建的target(本例指的是MySwiftaa)添加对ALL_BUILD库的依赖,操作如下第1张图所示,添加后的结果如下面第2张图所示。
    在这里插入图片描述
    在这里插入图片描述
  11. 把我们创建的target(本例指的是MySwiftaa)中的Enable Handened Runtime改为NO
    在这里插入图片描述
  12. 在MySwiftaa中的main文件中写入如下图的代码
    在这里插入图片描述
class Person {
    var name = "csx"
}

let p = Person()
  1. 在HeapObject文件中的swift_allocObject函数中断个点,然后编译运行该target,即可发现断点生效了,如下图所示。说明能用xcode调试swift了。
    在这里插入图片描述

如果你还想调试更多的swift的源码,请看下面

上面的步骤6所执行的编译只能调试swift的stdlib库里面的swift源码,比如上图所示的Person类的alloc方法的源码。此时如果你想调试Array的forEach方法,那么你需要重新编译swift源码(上面的步骤6所干的事情),只不过其中的编译参数–debug-swift-stdlib要变成–debug-swift,此时的编译命令如下:utils/build-script --xcode --release-debuginfo --debug-swift --skip-build-benchmarks --swift-darwin-supported-archs "$(uname -m)" --sccache --skip-ios --skip-tvos --skip-watchos --bootstrapping=off。可能你会遇到如下图的错误,但没有关系,因为swift-project/build/Xcode-RelWithDebInfoAssert+swift-DebugAssert/swift-macosx-arm64文件夹下面已经生成了Swift.xcodeproj文件了,此时你可以用xcode打开该文件。
在这里插入图片描述
然后编译你的自定义target。如果遇到如下图所示的错误,比如no such file or directory: ‘swift-project/build/Xcode-RelWithDebInfoAssert+swift-DebugAssert/llvm-macosx-arm64/Debug/lib/libLLVMSupport.a’
在这里插入图片描述
那么我们可以打开LLVM.xcodeproj,如下两张图所示。
在这里插入图片描述
在这里插入图片描述
选择名为ALL_BUILD的target,然后点击运行按钮。当编译成功后,再回到Swift.xcodeproj工程,然后就可以编译运行了。此时也能断点调试swift的代码了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos 安装deb格式安装包

背景 研发给了我一个deb包,需要我在centos 这种服务器操作系统上安装... deb包安装一般是使用dpkg -i xxxx.deb 命令,dpkg是Debian类型的系统,但是 通常centos是没有dpkg命令的... 直接就报:bash dpkg 未找到命令... 本来找研发给我编译rp…

Nature子刊 | 基于遥感和U-Net绘制6亿棵树木,并发现过去十年印度农田树木严重减少

题目:Severe decline in large farmland trees in India over the past decade 期刊:Nature Sustainability 论文:https://www.nature.com/articles/s41893-024-01356-0 结果数据: https://rs-cph.projects.earthengine.app/view/tree https://zenodo.org/records/10978…

布尔运算00

题目链接 布尔运算 题目描述 注意点 运算符的数量不超过 19 个布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成算出有几种可使该表达式得出 result 值的括号方法 解答思路 可以使用动态规划根据左右两侧区间不同结果相应组合数量计算得出当前…

Java---Maven详解

一段新的启程, 披荆斩棘而前, 心中的梦想, 照亮每个黑暗的瞬间。 无论风雨多大, 我们都将坚强, 因为希望的火焰, 在胸中永不熄灭。 成功不是终点, 而是每一步的脚印, 用汗水浇灌&…

2024年6月27日,欧盟REACH法规新增第31批1项SVHC高关注物质

ECHA公布第31批1项SVHC,物质已增至241项 2024年6月27日,ECHA公布第31批1项SVHC,总数达241项。新增物质未包括磷酸三苯酯,仍在评议中。REACH法规要求SVHC含量超0.1%需告知下游,出口超1吨须通报ECHA。SCIP通报要求SVHC含…

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String(字符串)类型 3.break continue return的区别 break,结束整个循环 continue,结束本次循环 return,结束整…

AI产品经理需要懂的算法和模型

本篇希望以精准推荐模型为案例通过全面的撰写将AI产品经理需要懂的算法和模型进行了系统的入门讲解。 一个产品经理经常疑惑的概念: 算法和模型的关系,产品经理懂得解决问题时将问题抽象为模型,对模型求解用算法,没有谁大谁小&a…

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展,激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率,还为相关行业带来了革命性的变革。在这篇博客中,我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…

从菌群代谢到健康影响——认识肠道丙酸和丁酸

谷禾健康 短链脂肪酸这一词经常出现在谷禾的文章和报告中,那你真的了解短链脂肪酸吗?短链脂肪酸(SCFA)主要是肠道微生物群在结肠内通过发酵碳水化合物(包括膳食和内源性碳水化合物,主要是抗性淀粉和膳食纤维)和一些微生物可利用的蛋白质而产生…

RabbitMQ 消息传递

消息何去何从 mandatory和immediate是channel.basicPublish方法中的两个参数,他们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。RabbitMQ提供的备份交换器可以将未能被交换器路由的消息(没有绑定队列或者没有匹配的绑定)存…

树莓派Pico

树莓派Pico是树莓派基金会推出的一款基于RP2040微控制器的微型计算机板,它是专为需要高性能微控制器的应用场景设计的,特别适合于需要实时控制、低功耗和小型化解决方案的项目。以下是树莓派Pico的详细介绍: ### 核心特点: - **基…

NAND闪存原厂铠侠加速推上市,预计10月完成IPO

NAND闪存原厂铠侠Kioxia拟趁着半导体市场回暖及企业财务状况显著提升的契机,加速推进其上市进程。 据报道,公司计划最快于8月底提交IPO申请,目标是在2024年10月末于东京证券交易所完成首次公开募股。此番上市动作不仅反映出市场复苏迹象&…

使用el-amap-info-window遇到的问题

使用的这个库https://github.com/yangyanggu/vue-amap 想要滚动amapInfoWindow里的内容,但不触发地图缩放 默认滚动amapInfoWindow里的内容,会触发地图缩放。看了C站一个大佬的文章解决了。 amapInfoWindow会自动滚动到顶部 我的amapInfoWindow里面用了…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于: PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm? 不同于c,c&#xff0…

Windows server 2016.2019 .NET Framework 3.5安装包、安装步骤

windows server2019 操作系统 安装 sqlserver2008时提示缺少 .NET Frameword 3.5, 在功能里选择 .NET Frameword 3.5安装报错, 下载安装包,下载地址 https://download.csdn.net/download/qq445829096/89450429这里指定备份源路径 安装包解…

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录:/sys/class/gpio /sys/class/gpio目录下文件如下图所示: 1.1 gpiochipX目录 功能:当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器,分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 (1)封装 (2)继承 (3)多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

韩顺平0基础学java——第32天

p638-652 Properties类 list:这个设备可以是一个流对象。 修改:如果该文件里没有Key,那即是创建,如果是有那就是修改。 继续坦克大战 防止敌人坦克重叠 满脑子都是今汐,亚达哟😭😭&#x1f6…

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2,将其和自己的2.5G交换机连接,使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿,几乎是几秒钟卡一下,使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…

PSA制氮装置在化工行业的应用解析

PSA制氮装置作为一种可靠的氮气制备技术,在化工行业中发挥着越来越重要的作用。本文将详细探讨PSA制氮装置在化工行业的应用。 一、PSA制氮装置的工作原理 PSA制氮装置通过吸附剂的吸附选择性,在高压下吸附原料气中的杂质成分,如氧气、水蒸气…