【问题标题】:LLDB issue - failure to run 'po'LLDB 问题 - 无法运行“po”
【发布时间】:2020-02-05 04:24:19
【问题描述】:

我的应用程序中有一个特定文件始终无法响应控制台中的po 命令。这个文件有一个函数,当我断点并运行 po 时,我看到:

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
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _

我要注销的特定变量似乎并不重要,因为它似乎在所有事情上都失败了。我所看到的是这个调试问题在这个文件上最常发生。

那么,这个文件是否有损坏的原因?

【问题讨论】:

  • p 怎么样,可以吗?
  • 不,那行不通。
  • 那不好。 :( 这可能是 stackoverflow.com/questions/55515329/… 的副本 - 无论如何,除非您提供区分它的信息,否则它似乎是一个。你可以吗?
  • 它似乎是相同的错误描述。在我的情况下,问题被本地化为文件中的单个闭包。
  • 太好了。感谢您缩小范围。我相信我也见过这种事情,并且正在绞尽脑汁记住当时的情况。你能把它减少到可重现的情况吗?如果是这样,您可以提交错误报告并帮助拯救世界。 :)

标签: xcode debugging lldb


【解决方案1】:

评估表达式时,lldb 必须复制运行表达式的上下文。例如,如果您在某个类的方法中停止,您希望能够透明地引用 ivars,而方法查找必须通过查找类层次结构来完成。

有时 lldb 无法确定上下文,并且我们尝试将您的表达式包装在正确的上下文中失败会产生无法编译的表达式。这就是你所看到的。

例如,人们开始做:

   guard let self = self! {}

在弱捕获自我的闭包中。两个自我的存在引发了循环的上下文重建。 lldb 还必须解决许多其他的细微问题。在这方面,Swift 是一种相当复杂的语言。

因此,如果您在特定环境中看到此问题,您可能会发现此问题的另一种表现形式。如果可以的话,请确保您尝试最新的 Xcode,因为 lldb 最近已经修复了大量此类错误。如果仍然无法正常工作,请使用http://bugs.swift.org 或使用 Apple 的反馈系统提交错误。

顺便说一句,如果您只需要检查变量,命令 frame var(在最近的 lldb 中别名为 v)通常会在 print 失败时起作用,因为它不会执行表达式解析器的大多数复杂技巧必须这样做。v 通常也更快,因为它只是检查内存,而不是在被调试者中构建、编译、注入和运行表达式...

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 2014-09-09
    • 2018-02-10
    • 2014-09-07
    • 2017-01-08
    • 2018-06-28
    • 2011-10-11
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多