Xcode调试器显示变量的值不正确

3

我之前在这里提过类似问题(链接)。这个版本有更简单的例子。

更新的总结:Xcode在调试器变量部分显示每个字符串"FAIL"。Swift print()语句显示正确的变量值。所有其他数据类型都显示正确。如何回到工作状态?

问题:Xcode显示变量的错误值。最初在一个项目中出现这种情况。现在,每个项目,包括新项目,都有错误的变量值。下面是演示新项目中出现此问题的屏幕截图(请原谅我将ViewDidLoad()用作main()..)

enter image description here

我做了什么:删除Xcode.app(版本10.0)。从App Store下载Xcode 10.1。创建一个新项目。输入此代码并运行。

在Xcode 9.4.1和Xcode 10.0中存在相同行为--与Xcode 10.1的新安装相同的行为,所以由于所有版本的Xcode都显示相同的问题,我假设此问题不在Xcode可执行文件中,而在某些缓存或其他临时文件中。我已经清理了我的项目,重新启动了Xcode,重新启动了计算机等。没有帮助。

所以我的问题是:如何获得一个干净的Xcode安装?我需要删除哪些目录才能达到工作状态?我是个新手。我只有在iOS调试器或OS X上运行的测试项目,所以我很高兴重新编译所有项目。是否有完整的临时文件和目录列表Xcode使用?

我需要删除Xcode曾经写入磁盘的所有内容吗?如果没有其它解决方案,我可以这样做。

感谢任何关于如何进行下一步操作或如何收集更多信息的建议...


我怀疑缓存文件不是问题所在。- 你是用优化编译的吗(即“发布”模式)?那么编译器可以重复使用不再需要的变量的内存,或者仅将某些变量保存在寄存器中。 - Martin R
1
(1)你是在模拟器上运行还是在设备上?如果是模拟器,你尝试过重置它(硬件|擦除所有内容和设置)吗?如果是设备,你尝试过删除应用并重新启动设备吗?有时候我在更改启动屏幕时需要这样做。 (2)你删除了派生数据(文件|项目设置,然后单击箭头在Finder中显示它)吗? 最后,(3)你尝试过像这样的东西:https://github.com/Seitk/Xcode-Cleanup-Script ? - user7014451
抱歉,那个仓库已经有5年历史了,可能不是一个好的选择。这里有两个Swift仓库,都不到一年的时间:https://github.com/brianramirez/xcode-cleanup https://github.com/onevcat/FengNiao 祝你好运! - user7014451
@Martin R 一切看起来都已经设置好了以进行调试。这是一个全新的项目,运行在新下载的 Xcode 构建上,因此我期望使用默认设置。我的构建设置显示“优化级别”为 0 (-O0) 用于 Debug。我的方案是自动生成的。“编辑方案”显示构建和运行目标使用 Debug。 - SDGary
@dfd 很好的问题。(1) 这是一款在我的 Mac 模拟器上运行的 OS X 应用程序。我还尝试在 iOS 应用程序中使用相同的代码,在 iOS 模拟器中运行。结果相同。当您说“重置模拟器”时,是否意味着退出并重新启动?如果是这样,那么对于 OS X 和 iOS 版本的应用程序,我已经多次进行了操作。(2) 是的,我已经多次删除派生数据。我还经常清理项目(SHIFT+CMD+K)。另外,重新启动 Xcode 甚至重启我的 Mac。(3) 这个 Github 项目删除了 DerivedData/* 和 Archives/*。我之前没有删除 Archive/*。但这并没有帮助--结果相同。 - SDGary
1个回答

5

经过很多猜测,我终于解决了这个问题。

我同意 @Martin R 的看法,认为这不像是缓存问题,因为在下载新版本的Xcode之后问题仍然存在。我猜想只有偏好设置和用户数据会比新的可执行文件更长久存在...

我查看了UserData目录,并找到了调试器的子目录:

~/Library/Developer/Xcode/UserData/Debugger/

在这个目录中有一个名为“CustomDataFormatters”的文件。我不知道这个文件是如何被创建的,但这是它的内容:
<?xml version="1.0" encoding="UTF-8"?>
<CustomDataFormatters
   version = "1.0">
   <SummaryFormatters>
      <SummaryFormatter
         formatString = "FAIL"
         type = "Swift.String">
      </SummaryFormatter>
   </SummaryFormatters>
</CustomDataFormatters>

这个文件似乎将每个字符串都设置为“FAIL”,而这正是我看到的确切行为。进一步的测试表明,整数、浮点数和其他数据类型都显示正确 - 只有String类型总是不正确。

删除此文件解决了我的问题。

如果有人能解释如何创建此文件,我会很感激,但现在,我能够重新进行调试!

在应用程序调试过程中,我右键单击字符串变量来“复制”数据或“查看值为...”。我按下某些键盘键序列来在调试期间创建此文件了吗?我在尝试CMD+B或CMD+R时按下了一些奇怪的快捷键吗?

另外,我更改了此问题的标题为“Xcode调试器显示所有字符串的“FAIL””,以帮助未来的搜索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接