Swift Debugger间歇性地无法打印局部变量的描述

时间:2017-05-18 19:20:20

标签: swift debugging lldb

我几个月来一直默默地处理这个问题,最后我觉得有必要在这里问一下。 lldb中的'po'经常导致以下输出:

  

(lldb)错误:: 3:1:错误:使用未解析的标识符'inView'   inView   ^ ~~~~~

我正在编写一个自定义动画视图控制器转换。我在animateTransition(using transitionContext:)方法中暂停了。 inView是在方法开头定义的局部变量。我在下一行使用它。我想查询它的价值。它显示在调试器的“变量视图”部分中(但只是名称而没有详细信息)。

所以我认为没有理由不打印出来。

现在,在人们谈论优化之前,这是一个运行默认方案的全新单一视图应用程序。 Swift编译器的默认优化设置没有针对调试配置文件进行优化。这确实是我的项目设置方式。

那么问题是什么?

1 个答案:

答案 0 :(得分:3)

即使在最低优化级别(-Onone),swift编译器也会为-O0的C语言进行更多的优化工作。 Swift依靠优化器使其更复杂的基本模型表现良好,即使在-Onone也需要完成其中的一些工作。

调试信息丢失到优化过程的一个常见症状是无法跟踪变量的位置。调试信息记录变量,但对于某些地址范围,不能重建其位置。从您的描述中可以看出您遇到了这个问题。

这种症状没有任何原因,因为失败是编译器的所有阶段的相互作用的结果。优化。快速的工程师可以看到的实例越多,他们可以修复的不良途径就越多。所以,当你看到这个时,请提交bug。有关的说明如下:

https://swift.org/contributing/#reporting-bugs