objective-c - Xcode4 中的打印对象未按预期运行

标签 objective-c cocoa xcode4 gdb

我不断看到有关能够从调试器执行代码的引用,但它对我来说从来不起作用。例如,

(gdb) po [NSNumber numberWithBool:NO]

给我“当前上下文中没有符号“NSNumber”。”。是否有我需要更改的设置?据我所知,我有一个完全正常的、未定制的 Xcode 4.0.2 副本(我仍在使用 Snow Leopard,因此无法升级到 4.1)。

更新 - 我在我的笔记本电脑上尝试了 4.1 - 完全相同的错误。

更新 2 - 一位 friend 发现,如果您向项目中的任何返回 NSNumber 的类添加一个方法,那么上述命令在 GDB 中就可以工作,即使该方法从未被调用。而且它似乎是任何和所有类方法,而不仅仅是 NSNumber。实例方法似乎工作正常。

谁能解释一下这里发生了什么,这是预期的行为还是错误?

顺便说一句,如果您想知道为什么我想打印它,背景故事在这里:http://objectivistc.tumblr.com/post/8992822737/a-chocking-mystery-po-nsnumber-numberwithbool-no

最佳答案

看起来像GDB optimises its symbol lookup table so that symbols that are not referenced in code are not loaded ,这就是为什么您的 friend 在更新 2 中能够使用 NSNumber

一个简单的修复方法是将出现的类名替换为相应的 NSClassFromString() 调用,例如将 NSNumber 替换为 NSClassFromString(@"NSNumber"):

po [NSClassFromString(@"NSNumber") numberWithBool:NO]

关于objective-c - Xcode4 中的打印对象未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083259/

相关文章:

ios - xcode 4 编辑多个目标重复更改

ios5 - RestKit loadObjectsAtResourcePath :delegate works once, 但以后再也不会

iphone - armv7 iPhone 警告

ios - If/Else TextView Action iOS

ios - 在标签栏 Controller 中的推送 View Controller 中显示工具栏

cocoa - NSResponder的缩进:?有什么用

objective-c - 为什么我的包忽略了它的 info.plist?

ios - 将HTML解析为NSDictionary

iphone - 如何去除iPhone应用程序中图像的背景?

ios - EKEventStore eventsMatchingPredicate 赋值