【问题标题】:Using LLDB for IOS debug class member variable NSArray使用 LLDB 进行 IOS 调试类成员变量 NSArray
【发布时间】:2012-04-24 00:13:50
【问题描述】:

有谁知道如何在IOS中获取类成员变量的值?

我尝试使用LLDB调试类成员变量中的NSArray。

运行后

__cellDataShadowArray2D = [[NSArray alloc] initWithObjects:[NSArray arrayWithObjects:obj1, obj2, nil], nil];

当我使用 LLDB(打印对象)检查值时,我总是得到这个。

(lldb) po __cellDataShadowArray2D
(NSArray *) $66 = 0x001e8894 <object returned empty description>

(lldb) p __cellDataShadowArray2D
(NSArray *) $67 = 0x001e8894

(lldb) po [__cellDataShadowArray2D count]
2012-04-24 10:10:38.535 SOME [61985:15803] -[__NSCFConstantString count]: unrecognized selector sent to instance 0x1e8894
(id) $68 = 0x00000000 <nil>

(lldb) po [__cellDataShadowArray2D retainCount]
(id) $69 = 0xffffffff [no Objective-C description available]

(lldb) p (int) [__cellDataShadowArray2D retainCount]
(int) $70 = -1

(lldb) p (int) [__cellDataShadowArray2D count]
2012-04-24 10:11:31.333 SOME [61985:15803] -[__NSCFConstantString count]: unrecognized selector sent to instance 0x1e8894
(int) $71 = 0

【问题讨论】:

  • 你是在分配后立即使用 lldb 吗?该对象是否可能已被释放?
  • 另外,__cellDataShadowArray2D 的类型是什么?
  • “类成员变量”是什么意思? ObjC 中没有类变量。你的意思是一个实例变量?还是静态变量?
  • 请注意,po 用于打印您发现的 objects - 没有意义将它用于 [foo retainCount],它会返回 NSUInteger
  • 我强烈怀疑您实际上并没有运行分配行。它的行为就好像它指向随机存储器。你确定任务已经运行了吗? __cellDataShadowArray2D 是否定义为强变量?

标签: objective-c ios xcode lldb


【解决方案1】:
  • 确保在进行测试之前对代码行进行实际评估。

很明显,__cellDataShadowArray2D 指向的是一个已编译常量字符串的空实例; @""。这意味着它不能是过度释放或类似的东西;这意味着分配尚未发生(或者您正在尝试调试优化的代码并且调试器由于优化而感到困惑)。

  • 非对象类型的 po 没有意义

  • retainCount 没用。不要叫它。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      这绝对是一个 LLDB 问题。我也有同样的情况,根本无法调试。我切换回 GDB 并没问题

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 1970-01-01
        • 2022-06-12
        • 2013-08-24
        • 1970-01-01
        • 2014-01-22
        • 2012-04-12
        • 2016-02-06
        • 2016-07-26
        相关资源
        最近更新 更多