【问题标题】:Use Xcode debugger to determine the type of objects stored in an NSArray使用 Xcode 调试器确定存储在 NSArray 中的对象的类型
【发布时间】:2013-05-15 01:44:46
【问题描述】:

如何使用 Xcode 调试器(lldb 或 gdb)来确定存储在 NSArray 中的对象类型?

【问题讨论】:

    标签: objective-c xcode4.5 lldb


    【解决方案1】:

    gdb 和 lldb 都支持对内存中的对象调用方法,您可以使用po 打印对象。要获取NSArray 中所有对象的某些属性的值列表,请使用valueForKey:。您似乎感兴趣的属性是class

    综合起来:

    po [theArray valueForKey:@"class"]
    

    【讨论】:

      【解决方案2】:

      在 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 的支持类型。

      【讨论】:

        【解决方案3】:

        在 Xcode 4.6 或更高版本中,Xcode UI 将为您显示该信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-06
          • 1970-01-01
          • 2017-01-21
          • 1970-01-01
          • 2010-10-14
          • 2012-12-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多