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

Swift Debugger intermittently fails to print descriptions for local variables

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

(lldb) error: :3:1: error: use of unresolved identifier 'inView' inView ^~~~~~

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

所以我看不出为什么不打印出来。

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

那么问题是什么??

即使在最低优化级别 (-Onone),swift 编译器也比 clang 在 -O0 为 C 语言所做的优化工作多得多。 Swift 依靠优化器使其更复杂的基本模型表现良好,并且即使在 -Onone 也需要做一些这样的工作。

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

此症状没有任何原因,因为失败是编译器和优化器所有阶段相互作用的结果。 swift 工程师看到的这种情况越多,他们可以修复的不良路径就越多。所以当你看到这个时请提交错误。说明在这里:

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