无法在一个特定的类文件中使用Swift调试器

时间:2016-07-13 16:29:07

标签: swift lldb

我可以使用调试器查看我的应用程序中除了一个类以外的所有内存中的值。每次我尝试,无论我尝试po有什么价值,我都会收到相同的错误消息:

(lldb) po searchInstitution.name
error: <EXPR>:2:1: error: cannot convert value of type 'Int' to expected argument type 'Device'
searchInstitution.name
^~~~~~~~~~~~~~~~~
<EXPR>:15:7: error: cannot convert value of type 'Int' to expected argument type 'Device'
  if (1==1) {                                          
      ^

Device是具有此定义的文件中的结构:

private struct Device: Hashable {
    let type: String
    let mask: String

    var hashValue: Int {
        return type.hashValue ^ mask.hashValue
    }
}

private func ==(lhs: Device, rhs: Device) -> Bool {
    return lhs.type == rhs.type && lhs.mask == rhs.mask
}

但它与我试图检查的SearchInstitution类实例的字符串属性无关。

有没有人见过这样的东西?关于我可能需要改变以修复它的任何想法?它使调试视图控制器非常令人沮丧。

1 个答案:

答案 0 :(得分:4)

这是一个已知的错误。表达式解析器用于包装表达式的代码中与“if(1 == 1)”的冲突在github lldb中修复(通过切换到“do” - 这在第一次编写代码时不可用。 。),并应将其纳入下一个官方工具发布。

如果你想在此期间解决它,只需将你的==运算符设为公共而非私有。表达式评估者试图强制本地私有定义优先于潜在冲突的全局定义,并且没有正确执行,因此只能看到私有本地定义。

请注意,更一般的bug尚未修复,因此如果您在可见的上下文中实际使用私有运算符,则仅使用运算符定义。