В некотором коде 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
Over в 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.