ios Xcode 11调试器的奇怪行为-存在值时将值显示为nil

relj7zay  于 2022-11-26  发布在  iOS
关注(0)|答案(2)|浏览(203)

我刚刚注意到Xcode11的奇怪行为,我正在Xcode 10和Xcode 11中执行相同的代码。
两个版本的屏幕截图见下文。
我正在从字符串创建一个url,当我把一个调试器,并检查myUrl的值,它显示nil,虽然在非常下一行,它通过nil检查和控制进入非nil的情况。
也可以查看控制台。
有没有人已经面临过这种类型的问题?或者我做错了什么。
已经清除缓存,导出数据,清理编译,重启Xcode。不要混淆断点的位置,两者都是用不同的系统捕获的。
先谢谢你。

a11xaf1n

a11xaf1n1#

这是一个已知的bug,影响LLDB(Xcode调试器)以及REPL。它纯粹是一个显示问题:
https://github.com/apple/llvm-project/issues/4477
https://github.com/apple/llvm-project/issues/4479
且看:
Instantiated optional variable shows as nil in Xcode debugger
现在一个简单的解决方法是通过桥接的Objective C类型。这个bug只存在于Swift Foundation覆盖类型中。所以在这种情况下,只需要转换为NSURL。
例如:

但是:

此错误将在Xcode 12.5中修复。

vzgqcmou

vzgqcmou2#

我用一个答案,因为评论会太长,但会更合适。
我目前( Catalina ,xcode 11.1)面临着许多类似的问题,除了调试器的速度普遍变慢之外。
无论如何,要确定的是:

  • 检查目标构建设置中是否禁用了调试的编译时优化:优化级别-O 0(变量可能被优化掉)
  • 这也解决了我的一些问题(禁用诊断使lldb更快,并解决了p/po和收集stacktrace的问题):Xcode 11 extremely slow - A known problem?

相关问题