175

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

截屏

错误:无法实现结构:变量 <varName> 的大小与 ValueObject 的大小不一致 在执行中出错,无法 PrepareToExecuteJITExpression

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

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

4

15 回答 15

281

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

如果要查看变量值,则必须处于“调试模式”(单击左上角靠近开始/停止按钮的项目名称,然后单击“编辑方案...”,然后单击“运行”设置,然后单击“ Info”选项卡,然后是“Build Configuration”。这里设置“Debug”。如果它在“Release”上,那就是你看到所有 nils 的问题)。

于 2013-11-11T10:33:33.737 回答
41

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

  • 前往项目Build settings
  • 搜索Debug
  • 检查Apple Clang - Code GenerationOptimization Level
  • 设置DebugNone [-OO]

之后,您将能够在调试区域或控制台中看到变量值。 在此处输入图像描述

于 2014-11-13T15:54:12.940 回答
31

确保在您的方案设置中关闭了 Address Sanitizer。Address Sanitizer 不适用于调试器。

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

在此处输入图像描述

于 2015-09-25T11:24:24.533 回答
16

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

对我来说,我同时使用Objective-CSwift

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

你会发现Apple LLVM 6.0 并且 Swift Compiler

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

令人惊讶的是,一旦你看到了价值,你就永久地解决了这个问题,然后你可以改变Optimization Level它以前的样子。

于 2015-01-19T06:58:17.263 回答
11

还有其他可能发生这种情况的方式。对我来说,这是因为“其他 C 标志”值设置为“-O2”,即使是在调试版本中也是如此。为调试版本关闭此功能可解决此问题。

于 2014-06-17T10:37:33.303 回答
9

过滤的调试输出

对我来说,Xcode 过滤掉了调试器的输出。确保您的输出设置为调试器输出或所有输出

于 2016-12-03T00:19:58.933 回答
6

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

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

在此处输入图像描述

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

于 2014-10-15T11:21:01.903 回答
5

我刚刚遇到了一个类似的问题:Xcode 调试器突然打印出一些对象类型,尤其是 NSStrings 为 (null),尽管它们是用一个值初始化的。通过打印出来

NSLog(@"String value: %@", myString);

显示了对象的正确值。

令人困惑!解决这个问题相当容易:我只是关闭了 Xcode 并重新启动了我的计算机。在我重新启动 Xcode 后,一切都再次正常工作:)。

于 2014-12-11T10:06:24.113 回答
5

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

于 2016-10-02T01:40:14.703 回答
3
  1. 删除派生数据
  2. 相当 Xcode / 重启
  3. 清洁项目

这就是我所需要的。

于 2017-09-07T17:21:44.170 回答
2

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

对我来说,解决方案是去Build Settings搜索Optimization Level并确保每个Debug设置都设置为None.

于 2015-01-31T01:04:36.070 回答
1

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

于 2016-06-21T07:51:40.287 回答
1

我也遇到过这个问题,当我发现我处于发布模式时,我切换到调试......没有修复。原来我必须先做一个干净的 (cmd+shift+k)。

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

于 2017-08-11T16:31:27.080 回答
1

当以非常特定的方式添加一些依赖项时,我遇到了这个问题 - 它可以工作,但是当你尝试从这个框架中打印一些东西时,你会得到error

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

于 2020-11-23T23:33:06.730 回答
-4

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

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

毕竟,调试/非调试之间的区别将是带有元数据的额外表,这些表只填充内存/磁盘空间。

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

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

并且补充一点,对我来说,“调试”链接时间优化从“单片”更改为“否”(xcode 8)。

于 2016-11-25T13:55:57.453 回答