首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux下搭建Swift开发调试环境

之前使用Vapor的时候,曾通过DockerUbuntu上安装过Swift,不过代码是mac上调试的。我也十分好奇,2021年Swift到底Linux下的开发环境如何?...swift_in_linux_lsp_demo LLDB 什么是LLDB LLDB调试器是LLVM项目的调试器组件。...它构建为一组可重用的组件,这些组件广泛使用LLVM中的现有库,例如Clang表达式解析器和LLVM反汇编程序。通过LLDB,让vscode拥有了对Swift代码进行调试的能力。..." } ] } type 用于此启动配置的调试器的类型,swift调试需设置成lldb request 此启动配置的请求类型,swift调试需设置成launch, name 调试启动配置下拉列表中的显示名称...settings 如果你也像我一样使用了vscode的setting同步功能,那么在其他的平台(比如mac),上述的settings.json将无法正常使用

9.9K20

汇编和栈

调试向您显示堆栈跟踪时会执行此操作。 请注意:某些系统不使用基本指针,而且他们在编译你的程序的时候也不会出现基础指针。 其实他们的逻辑可能是使用了其他的寄存器来当做指针寄存器。... LLDB 中,键入以下内容: (lldb) si 这个命令是单步调试的命令,它告诉 LLDB 执行下一条指令,然后暂停调试器。 现在,您已进入 StackWalkthrough。...使用 dumpreg 以及以下 LLDB 命令验证两者的值相同: (lldb) p (BOOL)(rbp == rsp) 请务必表达式两边加上括号,否则 LLDB 无法正确解析它。...然后会有如下输出 Swift.String, type_uid = 0x300000222 0x7f9b4633a988: Block{0x300000222}, ranges = [0x1000035e0...( LLDB使用 x /gx $ rbp 进行查看)。 (RBP + 0x8)将指向堆栈跟踪中前一个函数的返回地址( LLDB使用 x /gx'$ rbp + 0x8' 进行查看)。

3.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

Swift-5.3.1 源码编译Swift-5.3.1 源码编译

源码下载 可以到Swift-git下载任意版本的Swift源码 当然也可以使用下方命令,直接下载。...依赖下载 这一点Swift就很友好了,不想OC一样需要自己手动去下载依赖库,使用下方命令,这一部分要下载很多依赖文件,需要有一个比较好的网络。自己尝试下来最好是早上进行下载,成功的概率高很多 ....完成以上步骤,直接执行: /swift/utils/build-script -r --debug-swift-stdlib --lldb 这个过程有一点长,而且CPU温度可能有点高,建议使用别人的电脑来执行...来调试swift 由于我们使用vscode来进行编译,所以调试的时候也需要用vscode来进行。...使用以下json进行配置 { "version": "0.2.0", "configurations": [ { "type": "lldb",

73630

汇编寄存器的规则

这是与之前显示的方法相同的屏幕截图,除了这次是 iPhone 7 上的 ARM64 程序集中: 您现在可能无法区分这两种架构,但是您很快就会知道它们就像手背一样.... LLDB 控制台中输入以下内容: (lldb) po $rdx 输出 “NSEvent: type=LMouseUp loc=(351.672,137.914) time=175929.4 flags...首先, Swift 调试上下文内寄存器不可用。意味着你不得不获取到任何你想要的数据,并使用 OC 调试上下文打印出传入 Swift 函数的寄存器。...不然 Swift 调试器没有任何线索去解释内存地址。 话虽这么说,但是 Swift 使用了相同的寄存器调用规则。 但是有一个非常重要的区别。... Swift 中,RDI 是第一个参数,RSI 是第二个参数,依此类推,前提是 Swift 方法未使用动态分配。

2.4K50

Swift 周报 第二十三期

(中间没有选项) 当使用 -disable-reflection-metadata 标志禁用时,LLDB无法使用反射元数据,从而导致调试功能显着降低。...通过使用 -enable-reflection-for-debugger-only 标志,LLDB 可以使用反射,但是,它不会链接到 NTD,这将允许链接器通过 dead-stripping 消除它。...LLDB: 可能需要更改 LLDB,以教会它在没有提供 DSYM 的情况下进行调试时发现 DWARF 段中的反射。...如果你 macOS 上开发但部署到 Linux,你不再需要在 Linux 上运行你的代码来验证它是否工作,你可以在你的 Mac 上编辑、编译、运行和调试你的项目, VS Code 中运行的 docker...话题讨论 生活中遇到的问题你会使用 chatGTP 寻找答案吗? 欢迎文末留言参与讨论。

1.1K20

Swift源码编译-让底层更清晰

--debug-swift --force-optimized-typechecker # Swift frontend sans type checker built in debug 当然也会有一些玩得好的...如果觉得无聊可以喝杯茶,最好是一个无聊的午后编译哈~ 三、调试Swift源码 要在 Xcode 中打开 Swift 项目,请打开/swift-source/build/Xcode-ReleaseAssert...常见的调试流程将涉及: 选择 swift scheme。 调出 scheme 编辑器(⌘⇧<)。 选择 Arguments 选项卡,然后单击 +。 添加命令行选项。 关闭scheme 编辑器。...到目前为止,基本操作就完毕了,大家可以自由自在的畅玩Swift的海洋,注意发量 ~ 哈哈哈~ 四、构建失败原因分析 clone 失败大概率就是网络问题 确保使用正确版本的 Xcode。...确保所有存储库都是上述 update-checkout 命令中最新的 感谢 Swift源码编译 https://github.com/apple/swift https://lldb.llvm.org/

1.5K10

swift底层探索 07 -内存管理(refCount&weak&unowned)swift底层探索 07 -内存管理(refCount&weak&unowned)

提到内存管理iOS开发中,就不得不提ARC(自动引用技术)。本文主要讨论的就是ARCswift中是如何存储、计算,以及循环引用是如何解决的。...1. cfGetRetainCount - sil解析 class classModel{ var age : Int = 18 } let temp = classModel() CFGetRetainCount...>refCounts.increment(1); return object; } 后面源码的阅读会进行断点调试的方式。...} 面对这样的相互包含的两个类,使用时一定会出现相互引用(循环引用) ? 图六 deinit方法没有调用,造成了循环引用。...lldb验证 现在知道了refcount字段获取规律,以及sideTable对象的内部结构,现在通过lldb验证一下。 ?

98230

汇编和内存

由于您正在学习调试,因此大部分时间是阅读汇编而不是编写汇编。...TextEdit 之类的程序,因为它将在文件中添加不必要的字符,这可能导致 LLDB 无法正确解析该文件。...请记住,寄存器 Swift 上下文中不可用,因此您需要使用 Objective-C 上下文。 现在,您已经具有从汇编的角度探讨本章内容所需的工具!...一旦运行,请暂停程序并启动 LLDB 控制台。这将导致使用Swift 调试上下文,因为默认情况下暂停应用程序会带来非 Swift 上下文。... LLDB 中看到这一点也许会更好地描述它。返回 Registers 应用程序中,打开 AppDelegate.swift 并再次 aBadMethod 上设置一个断点。生成并运行该应用程序。

1.2K20

Swift正式登录Windows:苹果跨平台语言值几钱?

由于之前仅支持 MacOS 和 Ubuntu,所以使用 Windows 电脑的开发者如果想开发 iOS 的应用就只能购买一台 Mac 或安装 Hackintosh(俗称黑苹果)。...现在, Windows 上使用 Swift 开发终于成为了可能。...Swift 团队官方博客中表示,过去一年多的时间里,他们一直swift.org 上的开发人员一起努力将 Swift 移植到 Windows,现在,开发者已经可以 Windows 中使用 Swift...Swift 团队官方博客中展示了一款完全使用 Swift 编写的计算器: 该项目使用以下项目构建: Windows 上的 Swift 工具链 Visual Studio 2019 以及 CMake,Ninja...除此之外,开发者可以 Windows 中使用 LLDB 调试已构建的应用程序: 博客中还表示,效率工具的厂商 Readdle 正在尝试使用 Swift 编写跨平台应用程序,可以将许多现有的 Swift

1.2K20

Windows上也能用Swift编程了,官方编译工具安装包现已上线

由于Swift是苹果开发的一门编程语言,能在Ubuntu、Linux和苹果系统上使用,但在5.3版本前,Windows并不直接支持。...全Swift编写,Windows上运行 Windows上,使用Swift做的计算器,效果是这样的: ?...虽然界面由CMake构建,然而程序却是完完全全用Swift编写,应用程序代码和Swift系统库之间可以无缝切换。 至于调试lldb,也能很好地实现: ?...网友:Windows上植入Swift是神作 Saleem Abdulrasool的一次演讲中,他提到了Swift和Windows各自的优点。...此外,也有网友表示,鉴于Swift是他用过最好的语言,现在几乎是急不可耐地想要在Windows上编码Swift了。 ? 那么,你会尝试Windows中使用植入的Swift编写程序吗?

3.7K20

Swift进阶-LLDB调试

作为开发者,我们大部分的工作时间都用于调试调试协议,调试UI,调试bug,用好LLDB,打遍iOS无敌手。...target 调试器对象上操作的命令 thread 中的一个或多个线程操作的命令目前的过程 type 类型系统上操作的命令 version 显示LLDB调试器版本 watchpoint 操作上观察点的命令...显示任何返回值与LLDB的默认格式 q 退出LLDB调试器 r 调试器中启动可执行文件 rbreak 可执行文件中设置断点或断点集。 repl 评估当前线程上的表达式。...显示任何返回值与LLDB的默认格式 run 调试器中启动可执行文件 s 源级单步,单步调用。...默认为当前线程,除非指定 stepi 单步单步执行指令,默认为当前线程,除非指定 t 更改当前选定的线程 tbreak 使用一一个快捷键中的一个设置断点格式 undisplay 停止每一站显示表达式

79730

Swift 入门:编译 Swift 源码(2)

git gc 文档:https://git-scm.com/docs/git-gc 压缩前 Swift 及相关组件中,只有 swift 和 llvm-project 两个仓库笔记体积较大,所以我们以这两个仓库为例进行讲解...笔者的电脑上,两个仓库的体积合计 9G 左右: [image.png] 压缩后 压缩后体积在 4G 左右: [image.png] Tip2、编译中间文件 通常情况下,编译中间文件 会占用20G以上的空间...当我们开始使用 Xcode 进行编译或者调试时,这些文件都可以被删除。 批量清理方案 考虑到 Swift LLVM lldb 3个工程加起来有几百个临时文件夹,一个个手动删除的效率较低。...此时, liblldbInterpreter.a 需要被重新编译,target lldbInterpreter 就是lldb 的强依赖项 因为 LLDB.framework 强依赖 liblldbInterpreter.a...,所以,liblldb 同样是lldb 的强依赖项 如下所示,我们可以只保留两个强依赖项,移除其它的弱依赖项。

1.9K10

多角度体会 Swift 方法派发

从上面的查找过程可以发现 Swift 方法使用静态派发时,几乎是直接使用了方法的内存地址(因为是外部符号,需要经过动态库的符号重定位)。...消息派发 最后我们再看下消息派发的汇编代码: 这次的代码较多一点,我们单步调试停在第 16 行处,查看并计算 x8 + 0xb80 指向的地址: (lldb) register read x8 x8..._convertBoolToObjCBool(Swift.Bool) -> ObjectiveC.ObjCBool (lldb) image lookup --address 100bb0b80 Address...编译生成的 OC 兼容版本),有兴趣可以看看 objc_msgSend 的汇编解析。...根据 Swift 方法派发的特性,问题中 getMethodName 方法使用的是函数表派发,由于接口未改动,它的偏移地址是不变的, App 运行时编译都是能正常通过的,在运行时通过类的 metadata

59530

Swift5.8 中 AnyKeyPath 支持 CustomDebugStringConvertible 协议

如果对print()或者po命令传递 keypath(key路径,下文均使用原 keypath 表述),会输出 Swift 类的标准信息。...5.7 真实输出:Swift.WritableKeyPath结果的关键信息包含Theme和UIColor, 但其实你无法通过结果来区分当前属性是...设计细节实现 CustomDebugStringConvertible 协议跟目前KeyPath.swift中实现的函数_project非常相似,该函数将循环使用 keypath 的每个缓存区,按下列方式来处理每个段...;对于计算段,可以对ComputedAccessorsPtr的getter方法结果调用swift::lookupSymbol(),来解析该结果并获取属性名。...Swift 运行时更改为了实现计算段的描述,需要对 Swift 运行时做两处更改:需要公开 Swift call-convention 函数,用来调用swift::lookupSymbol();需要实现并暴露一个新函数来解析

61830

探索 Swift 底层源码编译

/swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone ▐ 3.4 编译 编译过程中既可以使用 ninja,也可以使用 Xcode...但是 Xcode 编译后的支持性不是特别好,所以这里就使用了 ninja 来作为编译工具了 ..../swift/utils/build-script -r --debug-swift-stdlib --lldb 此时包的大小如下图所示: ▐ 3.4 使用 VSCode 调试 Swift 首先,...调试 ---- 切换至终端 终端中写入一下代码 源码中搜索 swift_allocObject(这个在后面会研究,再次仅做调试的例子),加上断点 继续终端输入 var t = LjTeacher...() 回车 我们发现断点断住了,这说明调试成功了( LjTeacher() 内部调用了swift_allocObject 方法) 至此 Swift 源码调试完成,为后面探索 Swift 底层实现提供很直观帮助

34420

iOS各种调试技巧豪华套餐

因为很多小朋友学东西和玩游戏一样,看完前面的几种调试技能,就以为自己已经屌爆无敌了,其实他们不过是出门不带装备的玩家,如果只是使用了以上的调试技能只能说是低玩,高大的逼优鸡面前根本就是会被瞬秒的那种,...我们家的编译器历史 敬请乱入 《iOS中的预编译指令的初步探究》 ,没错我们现在正在使用着世界上最好的c、c++、oc、swift的编译器——LLVM,lldb就是这个世界上最好的LLVM的调试器!...可以让你好好的回味,呵呵 《The LLDB Debugger》 《About LLDB and Xcode》 《LLDB调试命令初探》 《与调试器共舞 - LLDB 的华尔兹》 Profile(instruments...因为无数个日夜博主就是深陷当中无法自拔,后来干脆直接重新新建一个工程!...由于表视图单元格现在使用了不透明层,所以会用绿色覆盖,以指示它们是不透明的。 除了标记图层外,还有其他一些有用的功能可帮开发者iOS模拟器中调试应用。

1.4K20

聊聊Swift中的宏

这些宏因为是标准库中的,我们无法查看展开后的样子,如果是自定义宏则可以直接展开查看,后面我们再介绍。...需要注意,在编写宏时,我们所有做的操作都是元编程操作,因此需要对Swift元代码进行解析与处理,这也是swift-syntax主要提供的功能。代码中的解析逻辑你可以暂时无需关注。...开发宏时,我们可以直接在使用处右键将宏进行展开,可以直接看到宏编译后的结果,例如: 如果宏展开后的结果比较复杂,我们也可以在运行时进行断点,将宏展开,然后直接进行断点调试即可。...单测执行时,我们是可以对宏的实现部分进行断点的,通过断点,可以对其输入参数的详细信息进行查看,方便我们宏逻辑的编写,以上述单测为例,断点可以后可查看语法节点数据,如下: (lldb) po node...另外,能够熟练使用swift-syntax包也是写好宏的基础。有时间,后面专门整理swift-syntax的用法吧,希望本篇文章可以为你带来一些帮助和启发,感谢你使用宝贵时间阅读。

33510
领券