有没有什么方法来获得(通过调试)在Objective-C不明物体的所有实例变量的列表?
我用LLDB调试,但我承认,我不知道它非常好。
很显然,我不能看着这个不明物体的头部。
我需要调试的时间去做,但如果这是不可能的,我可以在运行时使用的替代品。
我发现这个帖子: 我如何列出的Objective-C的对象的所有字段? 但是,据我所知,我需要有一个已知的类(我需要的对象的标题)
任何建议?
有没有什么方法来获得(通过调试)在Objective-C不明物体的所有实例变量的列表?
我用LLDB调试,但我承认,我不知道它非常好。
很显然,我不能看着这个不明物体的头部。
我需要调试的时间去做,但如果这是不可能的,我可以在运行时使用的替代品。
我发现这个帖子: 我如何列出的Objective-C的对象的所有字段? 但是,据我所知,我需要有一个已知的类(我需要的对象的标题)
任何建议?
利用你链接的问题接受答案的代码,你需要做的唯一的事情就是把它包装成一个方便的方法,这样你就可以调试过程中随时调用它。 在你的地方,我会写延长NSObject的 ,并称返回的NSDictionary所有实例变量的方法的范畴; 下面是一个例子:
- (NSDictionary*) ivars
{
NSMutableDictionary* ivarsDict=[NSMutableDictionary new];
unsigned int count;
Ivar* ivars=class_copyIvarList([self class], &count);
for(int i=0; i<count; i++)
{
Ivar ivar= ivars[i];
const char* name = ivar_getName(ivar);
const char* typeEncoding = ivar_getTypeEncoding(ivar);
[ivarsDict setObject: [NSString stringWithFormat: @"%s",typeEncoding] forKey: [NSString stringWithFormat: @"%s",name]];
}
free(ivars);
return ivarsDict;
}
然后,考虑到对象,你不知道的类型,如果它直接或间接地从NSObject的继承你只需要打印从这个方法返回的词典:
(lldb) po [someObject ivars]
积分: 如何列出在Objective-C的对象的所有字段?
PS:你需要导入objc / runtime.h。