我不断看到有关能够从调试器执行代码的引用,但它对我来说从来不起作用。例如,
(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/