打印双类型结构成员时LLDB中的奇怪行为

时间:2012-03-28 03:57:26

标签: objective-c c xcode debugging lldb

在某些iOS代码中,我在对象上有一个C struct ivar。此结构的一个成员是double类型。如果我在方法中分配给此struct成员,则当我打印struct本身时,调试器会报告此struct成员的值的虚假值(如同列表视图一样)变量),但是当我直接打印struct成员(p structWithDouble.doubleMember)时,我得到正确的值。此外,如果我将此成员的值分配给本地自动double var,我会在列表视图中和打印时看到正确的值。

我认为这是LLDB的一个问题,但它令人不安和令人沮丧。这是一个已知的问题?如果是,是否有解决方法?

实施例

typedef struct {
    double doubleMember;
} structWithDouble;

@interface MyClass : NSObject {
    structWithDouble structAsIvar;
}
@end

@implementation

- (void)someMethod {
    structAsIvar.doubleMember = 200.0;
    double localDouble = structAsIvar.doubleMember;
}

someMethod:内,调试器变量列表显示以下值:

structAsIvar.doubleMember (double) 1.65865e-307
localDouble               (double) 200

在LLDB中,在someMethod:

中断时,我得到以下输出
(lldb) p structAsIvar.doubleMember
(double) $4 = 200

(lldb) p structAsIvar
(structAsIvar) $5 = {
  (double) doublemember = 1.17244e-312
}

(lldb) p localDouble
(double) 200

(lldb) p self->structAsIvar.doubleMember
(double) 200

更新

我发现在使用GDB时会发生此行为的 none 。显然LLDB尚未准备就绪......但我仍然对LLDB的解决方案感兴趣。

1 个答案:

答案 0 :(得分:0)

看起来这已在Xcode 4.5的lldb(lldb-167.2)中得到修复:

(lldb)  p structAsIvar.doubleMember
(double) $5 = 200
(lldb)  p structAsIvar
(structWithDouble) $6 = {
  (double) doubleMember = 200
}
(lldb) p localDouble
(double) $7 = 200
(lldb) p self->structAsIvar.doubleMember
(double) $8 = 200
(lldb) 

我不确定哪个版本有修复;可能Xcode 4.4也可以正常工作但我现在没有那个可以测试。