【发布时间】:2012-04-11 15:45:46
【问题描述】:
在一些 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 时没有发生这种行为。显然 LLDB 还没有准备好……不过,我仍然对 LLDB 的解决方法感兴趣。
【问题讨论】:
-
仅供参考,您的第一个和最后一个链接是相同的。我也遇到过这个问题。它们可能是相关的,但与第一个问题的公认答案中的行为相反,
NSLog()提供与调试器相同的输出。但是,由于我预期的副作用正在发生,我知道值真的是200,尽管NSLog()或调试器说了什么。
标签: objective-c c xcode debugging lldb