Xcode 11调试器的怪异行为-有值时将值显示为nil

May*_*ain 5 xcode ios swift xcode10 xcode11

我刚刚注意到Xcode11的怪异行为,我正在Xcode 10和Xcode 11中执行相同的代码。

有关这两个版本,请参见下面的屏幕截图。

我正在从String创建一个url,当我放入调试器并检查myUrl的值时,它显示为nil,尽管在下一行它通过nil检查,并且控制进入not nil情况。

也请参阅控制台。

有没有人已经遇到过这类问题?或我做错了什么。

PS:已清除缓存,派生数据,清理生成,重新启动Xcode。不要与断点的位置混淆,它们都是用不同的系统捕获的。

提前致谢。

mat*_*att 6

这是一个已知的错误,会影响LLDB(Xcode调试器)以及REPL。纯粹是显示问题:

https://bugs.swift.org/plugins/servlet/mobile#issue/SR-11593

https://bugs.swift.org/plugins/servlet/mobile#issue/SR-11546

并查看:

实例化的可选变量在Xcode调试器中显示为nil

现在,一个简单的解决方法是通过桥接的Objective C类型。该错误仅与Swift Foundation覆盖类型有关。因此,在这种情况下,只需将其强制转换为NSURL。

因此,例如:

在此处输入图片说明

但:

在此处输入图片说明


jal*_*one 0

我使用一个答案,因为评论太长,但会更合适。

我目前(catalina,xcode 11.1)面临着许多类似的问题,除了调试器普遍变慢之外。

无论如何,可以肯定的是:

  • 检查目标构建设置中是否禁用了调试时的编译时优化:优化级别 -O0(var 可能会被优化掉)
  • 这也解决了我的一些问题(禁用诊断使 lldb 更快一点,并解决了 p/po 和收集堆栈跟踪的问题):Xcode 11 非常慢 - 一个已知问题?