为什么有时在用lldb调试时'self'不可用? [英] Why sometimes 'self' isn't available while debugging with lldb?

查看:379
本文介绍了为什么有时在用lldb调试时'self'不可用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很多时候(当时并非每次)当我尝试在lldb上打印对象时出现以下错误。是否有一些构建/调试配置要更改,或者这是lldb中的错误?

A lot of time (when it's not every time) I got the following error when I try to print objects on lldb. Is there some build/debug configuration to change or is this an error inside 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构建并且不剥离调试符号。

I build with llvm and do not strip debug symbols.

编辑:这是回溯:

(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:当我尝试打印本地变量时同样的事情

Edit 2: Same thing when I try to print local vars

(lldb) po currentUser
error: variable not available

如果我在代码中放了一些NSLog(),则打印正确的值。但不是用 po 命令。

If I put some NSLog() in the code, the correct value is printing. But not with the po command.

推荐答案

我通常会收到此错误当我打开编译器优化时。编译器将生成不一定遵循代码逻辑流程的代码。

I usually get this error when I have compiler optimization turned on. The compiler will generate code which does not necessarily follow your code logic flow.

在导航器中转到项目 - >目标 - >构建设置 - >搜索优化级别 - >扩展优化级别 - >选择调试行 - >在项目和目标的两列中更改为无。

Go to your project in the navigator -> Target -> Build settings -> Search for optimization level -> expand optimization level -> select the debug line -> change to none in both columns of your project and target.

希望这会有所帮助。

这篇关于为什么有时在用lldb调试时'self'不可用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆