Xcode调试器不打印对象,并且不显示nil

时间:2013-11-08 23:11:41

标签: ios objective-c xcode debugging

Xcode在尝试使用po <objectName>打印对象时显示错误,但仅针对一个项目。

Screenshot

  

错误:无法实现struct:变量的大小&lt; varName&gt;不同意ValueObject的大小   在Execute中出错,无法PrepareToExecuteJITExpression

Xcode调试器还将所有对象显示为nilself除外),当它们不是时(NSLog显示正确的输出,如图所示)。 我不知道这个项目有什么问题。其他每个项目都运作良好。

知道它可能是什么? (清理项目没有效果。)

14 个答案:

答案 0 :(得分:261)

您确定不在“发布模式”吗?

如果要查看变量值,则必须处于“调试模式”(单击开始/停止按钮左上角的项目名称,然后“编辑方案...”,然后“运行”设置,然后是“信息”选项卡,然后是“构建配置”。这里设置“调试”。如果是“发布”那就是你看到了所有的问题。

答案 1 :(得分:35)

我将Debug配置的“优化级别”设置为“无”,它解决了问题。

答案 2 :(得分:26)

确保在您的方案设置中关闭了地址清理程序。 Address Sanitizer与调试器不兼容。

  1. 转到编辑方案(产品&gt;&gt;方案&gt;&gt;编辑方案),选择运行,然后转到诊断标签。
  2. 确保“启用地址清理程序”已关闭。
  3. enter image description here

答案 3 :(得分:14)

似乎每个人都有自己的解决方案。

对我而言,我同时使用Objective-CSwift

首先,转到TARGETS -> Build Settings并搜索code generation

您会找到Apple LLVM 6.0Swift Compiler

将他们的Optimization Level全部更改为None,然后调试,您可能会发现值不是nil

令人惊讶的是,一旦你看到价值,你就可以永久地解决这个问题,那么你可以将Optimization Level改为以前的。

答案 4 :(得分:11)

还有其他方法可以发生。对我来说,这是因为“Other C Flags”值设置为“-O2”,即使对于调试版本也是如此。为调试版本关闭此功能解决了这个问题。

答案 5 :(得分:6)

我刚刚遇到此问题,发现它是因为构建设置中的Deployment Postprocessing = YES

将其更改为NO修正了它,如下面的屏幕截图所示:

enter image description here

OSX 10.9.5上的Xcode版本:6.0.1(6A317)

答案 6 :(得分:5)

在构建设置中确保Link-Time Optimization = No用于调试模式。

答案 7 :(得分:4)

我遇到了类似的问题:突然之间,Xcode调试器突然出现了一些对象类型,特别是NSStrings为(null),尽管它们是用值初始化的。通过

打印出来
NSLog(@"String value: %@", myString);

显示了对象的正确值。

混乱! 解决问题相当简单:我只关闭Xcode并重新启动计算机。重新启动Xcode后,一切正常:)。

答案 8 :(得分:3)

  1. 删除派生数据
  2. 相当Xcode /重启
  3. 清洁项目
  4. 这就是我所需要的一切。

答案 9 :(得分:2)

此处的解决方案还将修复每次尝试error: <EXPR>:1:1: error: use of unresolved identifier变量时{〗po的错误。

对我而言,解决方案是转到Build Settings并搜索Optimization Level并确保每个Debug设置都设置为None

答案 10 :(得分:1)

在构建设置中转到“其他C标志”并将调试值从-o2设置为-O0

答案 11 :(得分:1)

当以某种特定方式添加一些依赖项时,我遇到了这个问题-它起作用了,但是当您尝试从该框架中打印某些内容时,您会得到error

解决方案是以一般方式添加此依赖项

答案 12 :(得分:0)

我也遇到了这个问题,当我发现我处于发布模式时,我转而调试......没有修复。事实证明我必须先干净(cmd + shift + k)。

所以我认为发生的事情是,在内置发布模式后,并不是所有内容都在开发中重新编译,因此lldb无法正确读取符号。在开发清洁和重新编译之后,它对我有用。

答案 13 :(得分:-3)

现实情况是系统应该开箱即用,而不是由于链接到多种不同的设置,以至于事情可能对您有用。

为什么系统不允许总是在调试模式下调试是一个只有Apple可以回答的谜(如果他们关心,我最近怀疑他们这样做)。

毕竟,debug / non-debug之间的区别在于带有元数据的额外表,这些表只填充内存/磁盘空间。

如果您直接针对模拟器或设备进行编译,则不会关心那些额外的兆​​字节。

所以我们需要运行额外的循环来做一个非常基本和简单的事情,我知道自上个世纪以来所有的想法都很好。

并补充一点,对我而言,“调试”链接时优化从“单片”改为“否”(xcode 8)是有效的。