调试器中的 Xcode 6 奇怪(空)对象显示

Posted

技术标签:

【中文标题】调试器中的 Xcode 6 奇怪(空)对象显示【英文标题】:Xcode 6 strange (null) object display in debugger 【发布时间】:2014-10-29 14:13:42 【问题描述】:

我在 Xcode 6 调试器中看到了一个奇怪的行为。 我使用以下代码创建了一个单例共享实例:

+ (instancetype)shared 

    static DataBaseManager *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
    sharedInstance = [[DataBaseManager alloc] init];
    );

   return sharedInstance;

在对象通过调用这样的方法初始化之后:

DataBaseManager *manager = [DataBaseManager shared];
NSLog(@"");

我在“NSLog”上放置了一个断点,我看到以下调试器状态:

我已确保我在调试模式下启动,并且构建设置很好,这里的问题是:Xcode debugger doesn't print objects and shows nil, when they aren't

关于为什么会发生这种情况的任何想法? 这是我第一次看到这种奇怪的行为。 任何帮助将非常感激。

**UPDATE**

A bug was reported to apple bug report system.
The bug status is: Duplicate of 17164538 (Closed) 

so it is probably a known bug in Xcode.

【问题讨论】:

我对 Xcode 调试器可视化的体验是它非常脆弱。您可以依赖的是右侧的 LLDB shell。例如,po managerpo manager->_databasePath、……如果您遇到一致的问题,您可能需要向 Apple 提交错误报告。 @DarkDust 'po manager' 确实打印了 'manager' 的内存地址。一切正常,但这个问题令人沮丧。谢谢。 Xcode 变量显示的东西通常毫无价值。任何时候你怀疑它使用ppo。你会节省很多时间。 (当然,NSLog(@""); 不会向您显示任何内容。如果这应该是对manager唯一引用,那么它很可能被优化器抛弃了。) 【参考方案1】:

在调试代码时,您不应该在Release mode

如果您想查看变量值,您必须在Debug mode 中。步骤是

    点击左上角靠近开始/停止按钮的项目名称 进入Edit scheme 进入Run设置 进入Info tab 然后Build Configuration 设置为Debug

如果是在“Release”上,那你看到的都是零。 如果仍然无法正常工作,请尝试在项目中关注Build Settings

    Strip debug symbols during copy 设置为NO Optimization LevelNone -O0

【讨论】:

很高兴知道它对您有所帮助。【参考方案2】:

尝试在 Build Settings 中将 Deployment Postprocessing 设置为 NO 并检查。

【讨论】:

确保它设置为 NO。就像问题参考链接中所述:***.com/questions/19870176/… 有时这不足以避免“错误:无法实现:无法获取变量 VARIABLENAME 的值:变量不可用执行时出错,无法 PrepareToExecuteJITExpression”【参考方案3】:

确保在 Build Settings 中将 Link-Time Optimization 设置为 No 以用于调试模式。

【讨论】:

这对我有用! Xcode 8.1 beta 调试 ios 10.1 beta。

以上是关于调试器中的 Xcode 6 奇怪(空)对象显示的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 在调试器中暂停时有错误的调试值

Xcode 构建和调试奇怪的行为?

Xcode 9.2无法奇怪地调试自定义键盘扩展

Xcode 8 调试器不打印对象并显示表达式产生错误

在 Xcode 6 中调试时如何隐藏线程视图?

实例化的可选变量在 Xcode 调试器中显示为 nil