Странное поведение в LLDB при печати члена структуры двойного типа
В некотором коде iOS у меня есть C struct
ивар на объекте. Один из членов этой структуры имеет тип 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.
1 ответ
Похоже, это исправлено в lldb Xcode 4.5 (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 также работает правильно, но у меня нет этого под рукой для тестирования прямо сейчас.