你如何使用 Xcode 调试器(lldb 或 gdb)来确定存储在 NSArray 中的对象的类型?
问问题
2454 次
3 回答
5
gdb 和 lldb 都支持对内存中的对象调用方法,并且可以使用po
. 要获取 中所有对象的某些属性的值列表NSArray
,请使用valueForKey:
。您似乎感兴趣的属性是class
。
把所有这些放在一起:
po [theArray valueForKey:@"class"]
于 2013-05-15T02:17:19.760 回答
1
在 Xcode 4.6 或更高版本中,Xcode UI 将为您显示该信息
于 2013-05-15T15:04:56.303 回答
1
在 lldb 中执行此操作的另一种方法是使用 lldb 的数据格式化程序的组合——其中包括将 NSArray 对象呈现为“真实”数组的格式化程序——以及其中的“动态类型”工具expr
——它提取真实的数据,而不是声明的,对象的类型。例如:
(lldb) expr -T -d run-target -- *array1
(NSArray) $2 = {
(__NSCFConstantString *) [0] = 0x0000000100002590 @"array1 object1"
(__NSCFConstantString *) [1] = 0x00000001000025b0 @"array1 object2"
(__NSCFConstantString *) [2] = 0x00000001000025d0 @"array1 object3"
}
该-T
选项刚刚打开类型打印。NSArray“合成子提供者”将数组呈现为对象的索引数组。默认情况下这是有效的,我不需要做任何事情来打开它。动态类型选项-d
是解码每个对象的真实类型。请注意,您可以通过执行以下操作使查找动态类型成为 lldb 中的默认值:
(lldb) set set target.prefer-dynamic-value run-target
这个数组似乎充满了 __NSCFConstantStrings,这显然是常量 NSStrings 的支持类型。
于 2013-06-07T22:33:47.770 回答