【问题标题】:Strange behavior in LLDB when printing a double type struct member打印双类型结构成员时 LLDB 中的奇怪行为
【发布时间】: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 的解决方法感兴趣。

【问题讨论】:

标签: objective-c c xcode debugging lldb


【解决方案1】:

看起来这在 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 也可以正常工作,但我现在手头没有测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多