我的应用程序中有一个特定文件,该文件始终无法响应控制台中的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
~~~~^~~~~~~~~~~~~~~~~~~~
_
我注销的特定变量似乎无关紧要,因为它似乎在所有事情上都失败了。我所看到的是此调试问题在此文件上最一致地发生。
所以有没有一个原因可能导致此文件特别损坏?
评估表达式时,lldb必须复制在其中运行表达式的上下文。例如,如果您停止在类的方法中,则希望能够透明地引用ivars,并且必须执行方法查找来查找类层次结构。
有时lldb无法弄清楚上下文,而我们将您的表达式包装在正确的上下文中的失败尝试产生了无法编译的表达式。这就是您所看到的。
例如,人们开始这样做:
guard let self = self! {}
在封闭中会弱化自我。两个自我的存在使这种上下文重建陷入循环。 lldb还必须解决许多其他问题。在这方面,Swift是一种相当复杂的语言。
因此,如果您在特定的环境中看到此消息,则可能会发现此问题的另一种表现形式。如果可以的话,请确保尝试使用最新的Xcode,因为lldb最近修复了很多此类错误。如果仍然无法解决问题,请通过http://bugs.swift.org或使用Apple的反馈系统提交错误。
BTW,如果您只需要检查变量,则当frame var
失败时,命令v
(在最近的lldb中别名为print
)通常会起作用,因为它不会执行表达式解析器具有的大多数复杂技巧v
通常也要快得多,因为它只检查内存,而不是在调试对象中构建,编译,注入和运行表达式...