代码之家  ›  专栏  ›  技术社区  ›  Anton Tropashko

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

  •  3
  • Anton Tropashko  · 技术社区  · 6 年前

    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

    关闭$0.delegate

    错误::3:1:错误:匿名闭包参数未包含在 $0.代表

    可视化调试(将光标定位在$0上)确实有效, 你可以展开这棵树,找到你感兴趣的变量。但有一个小问题是,有大量的应用程序可用于uitableview,因此视觉调试的意图为 理解地狱

    考虑到调试工作的可视部分,必须有某种方法 从命令行那里???我怎么能只得到我感兴趣的部分?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Jim Ingham    6 年前

    “p”命令实际上编译您键入的文本,就好像表达式已经在您停止输入的帧的文本中一样。要做到这一点,它必须完全重新创建上下文。lldb获得了很多这方面的权利,但是它还不知道如何在它用来编译表达式的上下文中模拟$closure自动变量。

    但更普遍的是 print 只查看局部变量是一项困难得多的任务,而且lldb也有一种更直接的方法来查看简单的局部变量。Xcode使用这个工具来实现locals视图和工具提示。但它也是一个lldb命令行命令:

    (lldb) frame var $0
    

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

    (lldb) frame var $0.delegate
    

    你可能会有更多的运气 frame var 命令。