2012-04-02 76 views
6

我目前正在用Xcode 4.3.2编写iOS应用程序。在我的代码的大部分地方,使用LLDB进行调试工作得很好。但是,在某些时候,我正在逐步浏览我的代码时收到一条奇怪的消息。当我将鼠标悬停在伊娃,它说XLD 4.3与LLDB中奇怪的错误消息

错误[IRForTarget]:找不到Objective-C的间接伊娃符号OBJC_IVAR _ $ _ MyFancyClass.iVar

而不是显示我的价值。但是,在Variables View中,我可以看到它很好。直到我选择Print Description of ...也就是说,因为这样,Xcode崩溃了... 当我使用GDB时,悬停工作,但变量的类型和值是错误的。

我认为我的代码出了问题,导致调试器失败。但是,代码运行良好。我很乐意提供一些样本代码,但是班级相当长,我无法确定我拧紧的确切位置。那么有没有人遇到类似的行为?

更新:实际上,这似乎发生在我的代码中的任何地方,而不仅仅是在某些特定的文件。如果有帮助,当LLDB显示上述消息时,GDB总是显示拥有该iVar的Class对象,而不是iVar本身。 看起来好像内存管理有问题。例如,如果我这样说

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA]; 

选择被调用,即使我有

[notificationCenter postNotificationName:bar object:objB]; 
+0

您的代码可能很长,但似乎没有足够的人遇到此问题。你可以只显示出现这种行为的代码的汇总版本吗? – 2012-04-10 14:26:55

+0

那么,因为它发生在我的代码绝对无处不在,我真的不知道我可以发布什么...... – Phlibbo 2012-04-10 15:09:12

+0

我只是在这里猜测所以我不发布答案,但如果您尝试使用调试器会发生什么控制台并使用“po”打印对象?另外,你可能有任何特殊的gdb配置吗?这是你试图调试的包含库吗?您是否构建启用调试信息?仔细检查你的构建设置(生成调试符号,优化级别,调试信息格式)。 – 2012-04-10 15:31:10

回答

9

此错误的原因是不正确的生成设置,如问题评论中的讨论所示。这可以通过将“部署后处理”设置为调试模式的NO(默认值)来解决。

2

确保MyFancyClass.m被添加到您的目标

+0

不幸的是,它已经是:/ – Phlibbo 2012-04-06 14:07:14

0

你选择了nsnotification正在发送需要有一个(也是唯一的)参数,这是一个NSNotification。所以,当你这样做:

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA]; 

-(void)foo 
{ 

} 

...你需要做的: [通知中心的addObserver:自我选择:@选择(FOO :)名称:酒吧对象:objA]。

-(void)foo:(NSNotification *)notification 
{ 

} 

注意notificationCenter的选择器中的冒号和foo的参数。

+0

正确。然而,那只是我,在我的伪代码中有一个错字。请记住,真正的问题是奇怪的调试器警告:) – Phlibbo 2012-04-11 15:25:37

+0

(NSNotification)通知 应该是 (NSNotification *)通知 – braden 2013-09-11 22:09:27