在一些 iOS 代码中,我struct
在一个对象上有一个 C ivar。该结构的成员之一是 type double
。如果我在一个方法中分配给这个成员,当我打印它本身时struct
调试器会报告这个成员的值的虚假值(就像变量的列表视图一样),但是当我直接打印成员时,(),我获得正确的价值。此外,如果我将此成员的值分配给本地自动var,我会在列表视图和打印时看到正确的值。struct
struct
struct
p structWithDouble.doubleMember
double
我想这是 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 时不会发生这种行为。显然 LLDB 还没有准备好……不过,我仍然对 LLDB 的解决方法感兴趣。