gpt4 book ai didi

objective-c - 打印 double 类型结构成员时 LLDB 中的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:56 24 4
gpt4 key购买 nike

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

我认为这是 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 的解决方法感兴趣。

最佳答案

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

关于objective-c - 打印 double 类型结构成员时 LLDB 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com