【问题标题】:Attempting to print Generic.self in debugger ends the session尝试在调试器中打印 Generic.self 结束会话
【发布时间】:2019-08-22 23:53:41
【问题描述】:

假设我正在使用这样的泛型类型:

class Foo<T> {
    init () {
        print(T.self)
        // Breakpoint here
    }
}

Foo<String>()

一开始它会按预期打印“String”,但是如果我在调试器中键入po T.self,它会在断点处暂停,而不是显示结果,它会立即结束调试会话。 po String.self 工作正常,所以我认为它是泛型特有的。

这是 Xcode 中的错误吗?有什么办法可以解决这个问题,无需在代码本身中添加额外的调试行即可查看泛型的当前类型?

【问题讨论】:

  • 无法复制。在我的机器上打印出Swift.String
  • 如果你的意思是“结束调试会话”调试器退出或崩溃,那总是一个错误。你没有说你正在使用什么 swift 版本,并且解析 swift 泛型一直是 swift-debugger 接口的一个棘手部分。因此,这很可能会在最近的 Swift 中得到解决。我不能用 Xcode 11 beta 重现这个。但无论如何,如果您有一些重现此问题的示例代码,请使用bugs.swift.orgbugreporter.apple.com 提交错误。
  • @JimIngham Swift 5,但我仍在使用 Xcode 10.3,所以它可能已在测试版中修复?
  • 可能,我们做了很多工作来使 Swift 5.1 (Xcode 11) 中的类型重建更加可靠。我无法重现该问题,但此时我只安装了 11 个,所以这也可能是一些配置差异。不确定 matt 使用的是什么...

标签: swift xcode generics lldb


【解决方案1】:

基于无法重现它的cmets,这可能是我的环境或其他东西的问题。但是,我可以通过使用 po print(T.self) 来避免它,所以希望如果其他人遇到同样的问题,这应该可以工作。

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2020-02-26
    • 2013-12-16
    • 2011-03-23
    • 1970-01-01
    • 2015-06-04
    • 2018-06-15
    • 2016-01-18
    • 2018-11-03
    相关资源
    最近更新 更多