Xcode4中的print-object表现不尽如人意

时间:2011-08-16 18:37:52

标签: objective-c cocoa xcode4 gdb

我一直看到能够从调试器执行代码的引用,但它永远不适合我。例如,

(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

2 个答案:

答案 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