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

时间:2019-11-14 10:51:16

标签: ios swift xcode xcode10 xcode11

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

有关两个版本,请参见下面的屏幕快照。

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

也请参阅控制台。

有人遇到过此类问题吗?或我做错了什么。

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

谢谢。

2 个答案:

答案 0 :(得分:6)

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

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

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

然后看:

Instantiated optional variable shows as nil in Xcode debugger

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

例如:

enter image description here

但是:

enter image description here

答案 1 :(得分:0)

  

我使用的是答案,因为评论太长了,但是   会更合适。

除了调试器的总体速度下降外,我目前(卡塔琳娜,xcode 11.1)还面临许多类似的问题。

反正可以确定:

  • 检查是否在目标构建设置中禁用了编译时优化以进行调试:优化级别-O0(可以将var优化掉)
  • 这也解决了我的一些问题(禁用诊断使lldb更快,并解决了p / po问题并收集了堆栈跟踪):Xcode 11 extremely slow - A known problem?