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



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

(lldb( 错误::3:1:错误:使用未解析的标识符"inView" 在视图 ^~~~~~

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

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

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

那么问题出在哪里??

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

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

这种症状没有一个原因,因为失败是编译器和优化器所有阶段交互的结果。 快速工程师可以看到的实例越多,他们可以修复的不良路径就越多。 因此,当您看到此内容时,请提交错误。 有关说明,请点击此处:

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

相关内容

  • 没有找到相关文章

最新更新