【问题标题】:How can I fix the error "Cannot create Swift scratch context" when using LLDB使用 LLDB 时如何修复错误“无法创建 Swift 临时上下文”
【发布时间】:2020-06-04 06:49:09
【问题描述】:

每当我在 swift 模式下运行 LLDB 表达式时,都会出现以下错误。

无法创建 Swift 临时上下文(无法加载 Swift stdlib) 无法创建 Swift 临时上下文(无法加载 Swift 标准库)堆栈转储: 0.程序参数:/Applications/Xcode.app/Contents/Developer/usr/bin/lldb [1] 77539 分段错误 lldb

我尝试导入什么并不重要。

~ ❯❯❯ lldb
(lldb) expression -l swift -- import AppKit
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    6665 segmentation fault  lldb
~ ❯❯❯ lldb                                                                                                                                                        ✘ 139
(lldb) expression -l swift -- import Foundation
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    7122 segmentation fault  lldb
~ ❯❯❯ lldb                                                                                                                                                        ✘ 139
(lldb) expression -l swift -- import UIKit
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    7225 segmentation fault  lldb
~ ❯❯❯                                                                                                                                                             ✘ 139

有趣的是,在 Xcode 中使用 LLDB 时,同样的命令可以工作。

【问题讨论】:

  • 请不要向我们展示代码图片。显示代码(作为文本)。复制和粘贴。使代码清晰可复制。谢谢。
  • 注意到@matt 已删除图片。
  • 你安装了多个 Xcode 吗?用于构建代码的 swift 编译器和调试它的 lldb 必须匹配。因此,例如,如果您安装了一个测试版,并且使用该测试版构建但使用另一个 lldb 进行了调试,则预计不会工作。
  • @JimIngham 只安装了一个 Xcode,最后,唯一的解决办法是在 Swift REPL 中启动 LLDB。如果从 CMD 行开始,快速模式导入将失败。
  • REPL 和“从命令行开始”之间的区别在于,REPL 实际上是 lldb 附加到使用 lldb 正在使用的相同工具链构建的程序上,而从命令行你是将您构建的程序交给 lldb。您构建的程序与调试它们的 lldb 不匹配,但我对您的设置了解不足,无法猜测可能是什么。

标签: swift xcode lldb


【解决方案1】:

以下对话在我的终端中有效:

themini:~ mattneubelcap$ swift
Welcome to Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15).
Type :help for assistance.
  1> :
(lldb) expr -lSwift -- import Foundation
(lldb) expr -lSwift -- "howdy" as NSString

第二条命令成功,证明Foundation导入成功。如果没有,我们会收到error: use of undeclared type 'NSString'

注意-lSwift 之间没有空格。我不知道为什么“相同的命令”在 Xcode 中使用 LLDB,即使用空格。当然,如果您输入help expr,您会得到-l Swift 应该工作的印象。尽管如此,实验表明在终端中它必须是-lSwift(无空格)或--language Swift(空格),就像大多数命令行命令一样。是不是 Xcode LLDB 更宽容或遵循不同的语法规则(使用不同的解析器)?我不知道。

【讨论】:

  • 我认为是否在“-l”和“Swift”之间加一个空格并没有什么不同(至少在我的测试中没有)。真正的区别似乎是 OP 直接从命令行调用 lldb,而您从 Swift REPL 中调用它。
  • @MartinR 这是正确的,当从命令行启动 LLDB 时导入失败,但在 swift REPL 中启动时导入成功。
  • @MartinR 我发现如果我在终端测试中输入空格,我们会收到一个错误,即术语 -l 未知。
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2011-08-31
  • 2015-10-19
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多