在某些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的解决方案感兴趣。
答案 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也可以正常工作但我现在没有那个可以测试。