Почему допустимые объекты отображаются как Nil при использовании lldb? (Компилятор Apple LLVM 3.1, Xcode 4.3.1)

Я пытаюсь отладить какое-то причудливое поведение UIView и постоянно сталкиваюсь со случаем, когда LLDB абсолютно бесполезен и вводит в заблуждение. Позвольте мне показать вам, что я имею в виду:

NSLog(@"myView: %@", myView);

2012-04-20 15:24:57.070 myProj[35789:f803] myView: <MyView: 0x7cc7500; frame = (0 119; 768 885); layer = <CALayer: 0x7cc8030>>

Но когда я устанавливаю точку останова именно в этот момент и пытаюсь использовать отладчик, он возвращает nil:

(lldb) po myView
(MyView *) $552 = 0x00000000 <nil>

Я бы попробовал переключиться на GCC 4.2, чтобы посмотреть, поможет ли это, но компиляция под LLVM GCC 4.2 не вариант, так как это проект ARC.

Конечно, LLDB будет работать, если я уже знаю правильный адрес для запроса. Но связь между именами символов и адресами кажется нарушенной для некоторых объектов, хотя она работает для большинства других объектов.

(lldb) po self
(MyViewController *const) $51 = 0x07e92200 <MyViewController: 0x7e92200>
(lldb) po myView
(MyView *) $25 = 0x00000000 <nil>
2012-04-20 15:44:17.250 myProject[37551:f803] myView: <MyView: 0x7e8e240; frame = (0 119; 768 885); layer = <CALayer: 0x7ea2330>>
(lldb) po 0x7e8e240
(int) $50 = 132702784 <MyView: 0x7e8e240; frame = (0 119; 768 885); layer = <CALayer: 0x7ea2330>>

Как это исправить? Я даже пробовал self ->myView, но это тоже не сработало.

Обновление:(Становится хуже!)

Я должен добавить, что myView является переменной класса, а не свойством, в этом примере (где lldb связывает его с nil ). Если я сделаю myView свойством класса и @synthesize его, lldb получит неверное, но предсказуемое значение и свяжет символ myView с самым последним синтезированным свойством ДО @synthesize.Итак, в моем случае код выглядел так:

@synthesize myDate=myDate_;
@synthesize myView;

Таким образом, при оценке свойства myView из LLDB он показывает дату, хранящуюся в myDate_:

(lldb) po myView
(MyView *) $24 = 0x07ca0900 2008-01-08 05:00:00 +0000

В последнем случае, если я сделаю myView переменной метода, LLDB будет правильным:

(lldb) po myView
(UIView *) $7 = 0x07d81080 <MyView: 0x7d81080; frame = (0 119; 768 885); layer = <CALayer: 0x7d81b70>>

Это пахнет очень очевидной ошибкой в ​​самой LLDB.

Обновление 2:

Дальнейшие исследования :Похоже, ВСЕ свойства класса неверны! Первое свойство в списке показывает значение nil в LLDB, а все остальные показывают значение свойства, синтезированного прямо перед ним.

Может ли это быть странной ошибкой конфигурации?

7
задан AlleyGator 20 April 2012 в 21:11
поделиться