我一直看到能够从调试器执行代码的引用,但它永远不适合我。例如,
(gdb) po [NSNumber numberWithBool:NO]
在当前背景下给我“无符号”NSNumber。“我需要更改设置吗?据我所知,我有一个完全正常的,非自定义的Xcode 4.0.2副本(我仍然在Snow Leopard上,因此无法升级到4.1)。
更新 - 我在笔记本电脑上的4.1中尝试过 - 完全相同的错误。
更新2 - 一位朋友发现如果你向项目中任何返回NSNumber的类添加一个方法,那么上面的命令在GDB中工作,即使从不调用该方法。它似乎是任何和所有类方法,而不仅仅是NSNumber。实例方法似乎工作正常。
任何人都可以解释这里发生的事情,这是预期的行为还是错误?
顺便说一句,如果你想知道我为什么要打印它,背后的故事就在这里:http://objectivistc.tumblr.com/post/8992822737/a-chocking-mystery-po-nsnumber-numberwithbool-no答案 0 :(得分:1)
看起来像GDB optimises its symbol lookup table so that symbols that are not referenced in code are not loaded,这就是您在Update 2中的朋友能够使用NSNumber
的原因。
一个简单的解决方法是使用相应的NSClassFromString()
调用替换类名称的出现,例如将NSNumber
替换为NSClassFromString(@"NSNumber")
:
po [NSClassFromString(@"NSNumber") numberWithBool:NO]
答案 1 :(得分:0)
我不确定它是错误还是故意,但它不起作用。
请改为:
call(NSNumber *)[NSNumber numberWithBool:NO];
那会说“结果为1美元”。然后做:
po $ 1