【问题标题】:Xcode 6 strange (null) object display in debugger调试器中的 Xcode 6 奇怪(空)对象显示
【发布时间】: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唯一引用,那么它很可能被优化器抛弃了。)

标签: ios objective-c xcode debugging


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 很高兴知道它对您有所帮助。
【解决方案2】:

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

【讨论】:

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

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

【讨论】:

  • 这对我有用! Xcode 8.1 beta 调试 iOS 10.1 beta。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2020-03-10
  • 2015-02-10
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多