(lldb)错误:闭包中不包含匿名闭包参数

时间:2018-08-13 08:14:50

标签: swift xcode lldb

类似于 Anonymous closure argument not contained in a closure 但与lldb相关

tableViews.forEach {
        $0.dataSource = self
        $0.delegate = self

        $0.estimatedRowHeight = 30
          ^^^^^^^^^^^^^^ breakpoint is here
}

尝试调试

(lldb)p $ 0.delegate

  

错误:: 3:1:错误:不包含匿名闭包参数   关闭$ 0.delegate

(lldb)po $ 0.delegate

  

错误:: 3:1:错误:不包含匿名闭包参数   封闭       $ 0.delegate

视觉调试(将光标定位在$ 0上)确实有效, 您可以扩展树并转到您感兴趣的变量。但是有一个小问题,用于uitableview的索引不胜枚举,因此可视化调试意图为 理解地狱

鉴于调试的可视化部分必须起作用,因此必须有某种方法 从命令行那里????我怎样才能只得到我感兴趣的部分?

1 个答案:

答案 0 :(得分:5)

实际上,“ p”命令会编译您键入的文本,就像该表达式已出现在您所停靠的框架的文本中一样。为此,它必须完全重新创建该上下文。 lldb拥有很多这种权利,但它尚不知道如何在用于编译表达式的上下文中模拟$闭包自动变量。

但是,更一般而言,工作print要做的工作要困难得多,仅查看局部变量,并不奇怪l​​ldb也具有查看简单局部变量的更直接的方法。该工具是Xcode用于实现本地视图和工具提示的工具。但这也是lldb命令行命令:

(lldb) frame var $0

“ frame var”命令没有完整的语言解析器,例如,它无法计算表达式。但是它确实允许您指定结构的元素,例如:

(lldb) frame var $0.delegate

使用frame var命令可能会更幸运。