一部の iOS コードではstruct
、オブジェクトに C ivar があります。この構造体のメンバーの 1 つはタイプdouble
です。メソッド内でこのメンバーに割り当てると、デバッガーは、(変数のリスト ビューと同様に) メンバー自体を出力するときにstruct
、このメンバーの値に対して誤った値を報告しますが、メンバーを直接出力すると ( )、私は正しい値を取得します。さらに、このメンバーの値をローカルの自動変数に割り当てると、リスト ビューと印刷時に正しい値が表示されます。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 の回避策にはまだ興味があります。