调试器中的 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 manager
、po manager->_databasePath
、……如果您遇到一致的问题,您可能需要向 Apple 提交错误报告。
@DarkDust 'po manager' 确实打印了 'manager' 的内存地址。一切正常,但这个问题令人沮丧。谢谢。
Xcode 变量显示的东西通常毫无价值。任何时候你怀疑它使用p
和po
。你会节省很多时间。 (当然,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 Level
到 None -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 奇怪(空)对象显示的主要内容,如果未能解决你的问题,请参考以下文章