Xcode在尝试使用po <objectName>
打印对象时显示错误,但仅针对一个项目。
错误:无法实现struct:变量的大小&lt; varName&gt;不同意ValueObject的大小 在Execute中出错,无法PrepareToExecuteJITExpression
Xcode调试器还将所有对象显示为nil
(self
除外),当它们不是时(NSLog
显示正确的输出,如图所示)。
我不知道这个项目有什么问题。其他每个项目都运作良好。
知道它可能是什么? (清理项目没有效果。)
答案 0 :(得分:261)
您确定不在“发布模式”吗?
如果要查看变量值,则必须处于“调试模式”(单击开始/停止按钮左上角的项目名称,然后“编辑方案...”,然后“运行”设置,然后是“信息”选项卡,然后是“构建配置”。这里设置“调试”。如果是“发布”那就是你看到了所有的问题。
答案 1 :(得分:35)
我将Debug配置的“优化级别”设置为“无”,它解决了问题。
答案 2 :(得分:26)
确保在您的方案设置中关闭了地址清理程序。 Address Sanitizer与调试器不兼容。
答案 3 :(得分:14)
似乎每个人都有自己的解决方案。
对我而言,我同时使用Objective-C
和Swift
。
首先,转到TARGETS -> Build Settings
并搜索code generation
您会找到Apple LLVM 6.0
和Swift Compiler
将他们的Optimization Level
全部更改为None
,然后调试,您可能会发现值不是nil
令人惊讶的是,一旦你看到价值,你就可以永久地解决这个问题,那么你可以将Optimization Level
改为以前的。
答案 4 :(得分:11)
还有其他方法可以发生。对我来说,这是因为“Other C Flags”值设置为“-O2”,即使对于调试版本也是如此。为调试版本关闭此功能解决了这个问题。
答案 5 :(得分:6)
我刚刚遇到此问题,发现它是因为构建设置中的Deployment Postprocessing = YES
。
将其更改为NO
修正了它,如下面的屏幕截图所示:
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)
这就是我所需要的一切。
答案 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)是有效的。