【发布时间】:2012-04-16 12:18:07
【问题描述】:
我目前正在使用 Xcode 4.3.2 编写一个 iOS 应用程序。在我的大部分代码中,使用 LLDB 进行调试都可以正常工作。但是在某些时候,我在单步执行代码时收到一条奇怪的消息。当我将鼠标悬停在 iVar 上时,它会显示
错误 [IRForTarget]:找不到 Objective-C 间接 ivar 符号 OBJC_IVAR_$_MyFancyClass.iVar
而不是向我展示价值。但是,在Variables View 中,我可以看到它就好了。直到我选择Print Description of ...,因为那时,Xcode 崩溃了......
当我使用 GDB 时,悬停可以,但是变量的类型和值是错误的。
我发现我的代码有问题,进而导致调试器失败。但是,代码运行良好。我很想提供一些示例代码,但课程相当长,我无法确定我搞砸的确切位置。那么有没有人遇到过类似的行为呢?
更新:实际上,这似乎发生在我的代码中的任何地方,而不仅仅是在某些特定文件中。如果有帮助,当 LLDB 显示上述消息时,GDB 始终显示拥有 iVar 的类的对象,而不是 iVar 本身。 看起来好像内存管理有问题。例如,如果我说类似
[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];
即使我有选择器也会被调用
[notificationCenter postNotificationName:bar object:objB];
【问题讨论】:
-
您的代码可能很长,但遇到这种情况的人似乎并不多。您能否仅显示发生此行为的某些代码的摘要版本?
-
好吧,因为它在我的代码中无处不在,我真的不知道我可以发布什么......
-
我只是在这里猜测,所以我没有发布答案,但是如果您尝试使用调试器控制台并使用“po”打印出对象会发生什么?另外,您是否有任何特殊的 gdb 配置文件?这是您要调试的包含库吗?您是否在启用调试信息的情况下进行构建?仔细检查您的构建设置(生成调试符号、优化级别、调试信息格式)。
-
Matej,你真的明白了 :) 我已经检查了设置,但我又做了一次,注意到调试模式的“部署后处理”设置为“是”。将其更改为 NO 会删除警告,虽然我不太确定 LLDB 现在是否运行顺利(必须更仔细地检查设置),但这肯定回答了我的问题。很遗憾,我只是在这件事上浪费了一个 TSI :) 所以请随意制定一个正确的答案以收集您的奖励 :)
标签: objective-c ios debugging xcode4 lldb