Gre*_*reg 7 xcode cocoa-touch gdb objective-c
当使用gdb(通过调试控制台)在Xcode 4中调试iPad程序时,我正在尝试打印出运行类方法的结果:
(gdb) po [MyClass foo:@"bar"]
Run Code Online (Sandbox Code Playgroud)
gdb输出以下内容:
当前上下文中没有符号"MyClass".
有没有办法+(NSString *)foo:(NSString *)string在Xcode 4中打印使用gdb 的结果?
Bes*_*esi 11
我在这里遇到了同样的问题.在我的情况下解决方案是使用NSClassFromString这样的:
po [NSClassFromString(@"MyClass") foo:@"bar"]
Run Code Online (Sandbox Code Playgroud)
问题是你没有MyClass在目标源中声明任何类型的东西.如果您MyClass的设计只是静态方法,您可以尝试类似的方法
#if DEBUG //gdb Static Method Fix
MyClass *mc = nil; //This makes the symbol available
[mc class]; //supress unused warning
#endif
Run Code Online (Sandbox Code Playgroud)
我的猜测是,通过不在代码中的任何地方声明类的类型,它已经从查找符号中进行了优化.根据我的测试,上面的调用甚至不需要调用它来工作.如果你查看gdb行#1250的printcmd.c,这是打印错误的地方,这是在调用lookup_minimal_symbol之后发生的.虽然gdb无法在上下文中找到符号,但只使用MyClass源代码中的静态方法而没有上面的修复仍然没问题.