如何在gdb中打印objective-c类方法的结果?

时间:2011-04-25 21:11:52

标签: objective-c cocoa-touch xcode gdb

当使用gdb(通过调试控制台)在Xcode 4中调试iPad程序时,我正在尝试打印出运行类方法的结果:

(gdb) po [MyClass foo:@"bar"]

gdb输出以下内容:

  
    

当前上下文中没有符号“MyClass”。

  

有没有办法在Xcode 4中使用gdb打印+(NSString *)foo:(NSString *)string的结果?

2 个答案:

答案 0 :(得分:11)

我遇到了同样的问题here。在我的情况下,解决方案是使用NSClassFromString,如下所示:

po [NSClassFromString(@"MyClass") foo:@"bar"]

答案 1 :(得分:6)

问题是您没有在目标来源中声明MyClass类型的任何内容。如果您的MyClass仅设计为具有静态方法,则可以尝试使用

#if DEBUG //gdb Static Method Fix
    MyClass *mc = nil;  //This makes the symbol available
    [mc class];         //supress unused warning
#endif

我的猜测是,通过不在代码中的任何地方声明类的类型,它已经在查找符号中进行了优化。根据我的测试,上面的调用甚至不需要调用它来工作。如果你查看printcmd.c of gdb第1250行,这是打印错误的地方,这是在调用lookup_minimal_symbol之后发生的。虽然gdb无法在上下文中找到符号,但仍然可以在源代码中仅使用MyClass的静态方法而不使用上述修复。