Странное поведение в 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 также работает правильно, но у меня нет этого под рукой для тестирования прямо сейчас.

Другие вопросы по тегам