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

Bin*_*ian 157 debugging xcode objective-c ios

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

截图

错误:无法实现struct:变量<varName>的大小不同于ValueObject的大小在Execute中出错,无法PrepareToExecuteJITExpression

Xcode调试器还将所有对象显示为nil(self排除),如果不是(NSLog显示正确的输出,如图中所示).我不知道这个项目有什么问题.其他每个项目都运作良好.

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

小智 262

你确定你没有处于"发布模式"吗?

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

  • 不幸的是,在某些情况下,lldb在调试模式下执行此操作,优化关闭,并​​且调试符号存在.是时候访问bug report.apple.com了 (30认同)
  • @ Alex1987我在项目`Build Settings`中设置`在复制期间将调试符号剥离到'NO`并将`Optimization Level`设置为`None -O0` (15认同)
  • 有同样的问题 - 优化级别为"无".问题是,对于调试模式,链路时间优化(LTO)也设置为"是". (4认同)
  • 我只有一个配置,如何更改配置,使其像"调试配置"? (3认同)
  • 好吧,我创建了一个空项目,现在可以看到`Build Settings`中的所有差异,部署属性`在复制期间剥离调试符号'设置为YES. (2认同)
  • 我有一个自定义配置'Debug_Staging',它基本上是原始Debug的副本,我也收到此错误... (2认同)
  • 只是好奇,你们中的任何人都有"启用地址消毒剂"吗? (2认同)

Les*_*rna 35

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

  • 好笑,那没用.我做了相反的事情.我切换到"最快,最小[-Os]"并且它有效. (2认同)

KIO*_*KIO 27

确保在Scheme设置中关闭了Address Sanitizer.Address Sanitizer与调试器不兼容.

  1. 转到编辑方案(产品>>方案>>编辑方案),选择运行,然后转到诊断选项卡.
  2. 确保"启用地址清理程序"已关闭.

在此输入图像描述

  • 这是我的解决方案.显然,有很多原因会发生这种情况. (3认同)

Art*_*alk 16

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

对于我来说,我使用Objective-C,并Swift在同一时间.

首先,去TARGETS -> Build Settings搜索一下code generation

你会发现Apple LLVM 6.0Swift Compiler

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

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


Tho*_*asW 11

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


Cur*_*bly 9

过滤的调试输出

对我来说,Xcode过滤掉了调试器输出.确保输出设置为Debugger Output或All Output


Luk*_*uke 6

我刚刚遇到这个问题,发现这是因为Deployment Postprocessing = YES在Build Settings中.

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

在此输入图像描述

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


Tor*_*hel 5

我只是遇到一个类似的问题:突然,Xcode调试器突然将某些对象类型(特别是NSStrings)打印为(空),尽管它们是使用值初始化的。通过打印

NSLog(@"String value: %@", myString);
Run Code Online (Sandbox Code Playgroud)

显示了该对象的正确值。

令人困惑!解决问题非常容易:我只是关闭Xcode并重新启动计算机。重新启动Xcode后,一切再次正常:)。


lla*_*591 5

确保Link-Time Optimization = No在Build Settings中进行调试模式.