【问题标题】:Xcode lldb error: can't print out Swift variable - get "$__lldb_injected_self.$__lldb_wrapped_expr_x" insteadXcode lldb 错误:无法打印出 Swift 变量 - 改为获取“$__lldb_injected_self.$__lldb_wrapped_expr_x”
【发布时间】:2018-06-23 01:08:06
【问题描述】:

有时,当尝试在调试器中打印出变量时,会显示以下错误消息:

error: warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _

error: <EXPR>:18:5: error: use of unresolved identifier '$__lldb_injected_self'
    $__lldb_injected_self.$__lldb_wrapped_expr_120(     
    ^~~~~~~~~~~~~~~~~~~~~

这是一个已知的 lldb 错误 (https://bugs.swift.org/browse/SR-6156),但也许有人知道在修复该错误之前可以使用的解决方法?

【问题讨论】:

    标签: swift xcode debugging lldb


    【解决方案1】:

    作为一种解决方法,您可以使用以下方法在lldb 调试器中打印它:

    frame variable variablename
    

    也可以使用缩短的语法来加快输入速度

    fr v variablename
    

    从 XCode 10.2 开始支持更简单的lldb 语法:

    v variable
    

    更新 - 新的解决方法:

    打印堆栈地址:

    v -L variablename
    

    po 喜欢堆栈帧 variable.property

     v -o variablename.property
    

    Swift 喜欢 p

    e unsafeBitCast(address, to: ClassName.self)
    

    Update2 - 新的解决方法 适用于作为 objc 类包装器的 Swift 类。

    例子:

    v response
    (HTTPURLResponse) response = 0x0000000283ba7640 {
    

    如果v 有效^:

    e -l objc -- (int)[0x0000000283ba7640 statusCode]
    (int) $2 = 404
    

    我会感谢报告真正有用且有效的内容。谢谢。

    可在此处找到有关此类功能的更多信息: https://developer.apple.com/library/content/documentation/General/Conceptual/lldb-guide/chapters/C5-Examining-The-Call-Stack.html

    【讨论】:

    • 总比没有好,但使用起来仍然很麻烦......我想知道为什么这个 Swift 错误(?)没有修复这么久?
    • 这并不能解决问题。可以在其他代码库中打印变量。为什么现在不行了?为什么它可以与其他代码库一起使用?
    【解决方案2】:

    清理项目并删除派生数据为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 2016-04-07
      • 2017-10-02
      • 2016-07-06
      • 2014-10-09
      • 2015-05-15
      • 2015-10-03
      • 2018-09-28
      • 1970-01-01
      相关资源
      最近更新 更多