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

Posted

技术标签:

【中文标题】Xcode 调试器显示不正确的变量值【英文标题】:Xcode debugger displays incorrect values for variables 【发布时间】:2018-11-02 13:19:34 【问题描述】:

我之前问过类似的问题here。这个版本有更简单的例子

更新摘要:Xcode 在每个字符串的调试器变量部分显示“FAIL”。 Swift print() 语句显示正确的变量值。所有其他数据类型都正确显示。如何恢复到正常工作的可执行文件?

问题:Xcode 显示的变量值不正确。最初这发生在一个项目中。现在,每个项目,包括新项目,都有不正确的变量值。这是一个演示新项目中问题的屏幕截图(请原谅我将 ViewDidLoad() 用作 main()..)

这就是我所做的:删除 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 曾经写入磁盘的所有内容?如果没有其他解决方案,我对此持开放态度。

感谢您对如何进行或如何收集更多信息的任何建议...

【问题讨论】:

我怀疑缓存文件是问题所在。 – 您是否进行了优化编译(即在“发布”模式下)?然后编译器可以重用不再需要的变量的内存,或者只在寄存器中保存一些变量。 (1) 你是在模拟器还是设备上运行这个?如果是模拟器,您是否尝试过重置它(硬件|擦除所有内容和设置)。如果设备您尝试删除应用程序并重新启动设备?有时在更改启动屏幕时我需要这样做。 (2) 您是否删除了派生数据(文件|项目设置,然后单击箭头在 Finder 中显示)?最后,(3)你有没有尝试过这样的事情:github.com/Seitk/Xcode-Cleanup-Script? 抱歉,那个 repo 已经 5 年了,可能不是一个好的。这是两个不到一年的 Swift 存储库:github.com/brianramirez/xcode-cleanupgithub.com/onevcat/FengNiao 祝你好运! @Martin R Evertyhing 似乎设置为调试。它是一个在新下载的 Xcode buid 上运行的全新项目,所以我希望使用默认值。我的构建设置显示调试的“优化级别”为 0 (-O0)。我的方案是自动生成的。 “编辑方案”显示构建和运行目标使用调试。 @dfd 好问题。 (1) 这是一个 OS X 应用程序,在我的 Mac 上的模拟器上运行。我还在 iOS 模拟器中运行的 iOS 应用程序中尝试了此操作,代码相同。结果相同。 “重置模拟器”是指退出并重新启动吗?如果是这样,是的,对于应用程序的 OS X 和 iOS 版本多次。 (2) 是的,我已经多次删除派生数据。我也经常清理项目(SHIFT+CMD+K)。另外,重新启动 Xcode 甚至重新启动我的 mac。 (3) 这个github项目删除了 DerviedData/* 和 Archives/* 。我之前没有删除 Archive/* 。这没有帮助 - 结果相同。 【参考方案1】:

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

我同意@Martin R 的观点,这听起来不像是缓存问题,因为下载新版本的 Xcode 后问题仍然存在。我猜想只有首选项和 UserData 会超过新的可执行文件...

我查看了 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”,这正是我看到的行为。额外的测试表明,整数、浮点数和其他数据类型显示正确——只有字符串类型总是不正确。

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

如果有人能解释这个文件是如何创建的,我将不胜感激,但现在,我可以再次调试!

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

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

【讨论】:

以上是关于Xcode 调试器显示不正确的变量值的主要内容,如果未能解决你的问题,请参考以下文章

怎么在debug时显示全部的变量值

在 Xcode 中检查多个变量值

检查内联函数内的变量值

Xcode 7 beta调试器没有在Swift代码的断点处显示变量值

ecplise调试源码的变量值

js如何实现将一个通过计算出来的变量值,不刷新页面就可以将变量值显示在同一页面的文本框中?