为什么在使用lldb进行debugging时有时候“self”不可用?

很多时间(当它不是每次)我尝试打印lldb上的对象时,出现以下错误。 是否有一些build立/debuggingconfiguration改变或这是一个错误lldb内?

(lldb) po userLevel error: warning: Stopped in an Objective-C method, but 'self' isn't available; pretending we are in a generic context error: use of undeclared identifier 'userLevel' error: 1 errors parsing expression 

我用llvm构build,不去除debugging符号。

编辑:这是回溯:

 (lldb) bt * thread #1: tid = 0x1c03, 0x001169c5 FanCake-Beta`-[KWUserLevelController addPoints:](, _cmd=0x0029187b, points=15) + 179 at KWUserLevelController.m:53, stop reason = step over frame #0: 0x001169c5 FanCake-Beta`-[KWUserLevelController addPoints:](, _cmd=0x0029187b, points=15) + 179 at KWUserLevelController.m:53 frame #1: 0x00112172 FanCake-Beta`-[KWEventRealTimeControllergameEngine:hostedGame:didSucceedIn:withScore:](self=0x0b9d7740, _cmd=0x0027a2a7, engine=0x1be5af40, game=0x1be5a850, completionTime=3.59473554800206, score=0) + 421 at KWEventRealTimeController.m:647 frame #2: 0x0007189a FanCake-Beta`__35-[KMCatchEmGameEngine animateStep6]_block_invoke197(, finished='\x01') + 257 at KMCatchEmGameEngine.m:214 frame #3: 0x01990df6 UIKit`-[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 223 frame #4: 0x01983d66 UIKit`-[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 237 frame #5: 0x01983f04 UIKit`-[UIViewAnimationState animationDidStop:finished:] + 68 frame #6: 0x017587d8 QuartzCore`CA::Layer::run_animation_callbacks(void*) + 284 frame #7: 0x03634014 libdispatch.dylib`_dispatch_client_callout + 14 frame #8: 0x036247d5 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 296 frame #9: 0x04737af5 CoreFoundation`__CFRunLoopRun + 1925 frame #10: 0x04736f44 CoreFoundation`CFRunLoopRunSpecific + 276 frame #11: 0x04736e1b CoreFoundation`CFRunLoopRunInMode + 123 frame #12: 0x040367e3 GraphicsServices`GSEventRunModal + 88 frame #13: 0x04036668 GraphicsServices`GSEventRun + 104 frame #14: 0x01945ffc UIKit`UIApplicationMain + 1211 frame #15: 0x000039a8 FanCake-Beta`main(argc=1, argv=0xbffff354) + 94 at main.m:13 frame #16: 0x00002dc5 FanCake-Beta`start + 53 

编辑2:同样的事情,当我尝试打印本地增值税

 (lldb) po currentUser error: variable not available 

如果我把一些NSLog()在代码中,正确的值是打印。 但不是与po指挥。

我打开编译器优化时通常会得到这个错误。 编译器将生成不一定遵循您的代码逻辑stream程的代码。

在导航器中 – >目标 – >构build设置 – >search优化级别 – >展开优化级别 – >selectdebugging行 – >在项目和目标的两列中更改为无。

希望这可以帮助。

我有这个问题,当我编辑我的计划,并将运行生成设置为debugging时,它就消失了。 我已经把它设置为AdHoc来testing推送通知,这显然使LLDB不高兴。

因为它被优化了。 我们用一个例子:

 void f(int self) { // Here, "self" is live:Its value is used in the call to NSLog() NSLog(@"I am %d",self); // Here, "self" is dead: Its value is never used. // I could do self=0 or self=self*self and nobody would know. // An optimizing compiler will typically optimize it away. // It might still be on the stack (in the parameters passed to NSLog()) // but the compiler shouldn't assume this. NSLog(@"Another function call: %d", 1); // If "self" was on the stack, it will probably now have been overwritten. } 

编译器做了很多事情来使你的代码更快/更小; 忘记不再需要的variables是一个非常普遍的优化。

正如在另一个问题中所说的那样:

在“生成设置”中,将“预编译前缀头文件”设置为“NO”。