lldb错误:variables不可用
这是我的两行代码:
NSString *frontFilePath = [[NSBundle mainBundle] pathForResource:[self.bookendFileNames objectAtIndex:self.randomIndex] ofType:@"caf"]; NSLog(@"frontFilePath = %@", frontFilePath );
我在第二行写了一个断点,在那里我尝试打印它:
(lldb) po frontFilePath
但是我得到以下错误:
error: variable not available
我很困惑,因为如果我跨过NSLog语句,variables确实打印到控制台。
对于它的价值,我试图debugging第一行,因为有时它返回NULL,我不能,现在,弄清楚为什么。
这是debugging优化代码的工件。 在编译设置中启用编译器的优化时,会在内存和寄存器之间移动variables,因为它认为是最好的。 在你检查lldb中的variables的地方,它可能根本不存在于寄存器或存储器中 – 即使它看起来应该仍然可用于显示。
这可能是编译器输出的debugging信息的一个缺点。 有时编译器会将一个variables复制到一个寄存器中供其使用,并只在debugging信息中列出该寄存器的位置。 后来寄存器被重新用于其他用途。 值仍然存在于堆栈上,但是编译器并没有告诉debugging器该值可以在那里find。
要真正判断debugging信息是否不足,或者在特定指令中真正不存在的唯一方法是手工检查汇编代码。 只要你打开编译器的优化,源代码就变成了一个弱视图,以什么特定的顺序实际执行。
如果可能的话,我强烈build议closures优化(在您的构build设置中的优化级别),然后以这种方式进行debugging,而不是在优化代码debugging的古怪世界中游荡。 如果您确实需要通过优化来debugging您的应用程序,请确保您正在使用Xcode支持的最新Apple LLVM编译器进行构build – 总会有一些工作正在进行,以改进优化的代码debugging,并希望利用最多的迄今为止的工具,你可以。