Остановившись в viewDidLoad ViewController, вы можете получить доступ к свойству «view» так же, как в коде:
(lldb) expr self.view
(UIView *) $0 = 0x0000000100615150
Теперь у нас есть адрес UIView, давайте попробуем получить доступ к его свойствам:
(lldb) expr ((UIView *) 0x0000000100615150).frame
(CGRect) $5 = (origin = (x = 0, y = 0), size = (width = 768, height = 1024))
Собственность vrs.Обозначение метода «следует» просто автоматическая замена в компиляторе.Однако, когда мы не знаем тип свойства, использование доступа к свойству в синтаксическом анализаторе выражений отладчика может привести к проблемам, особенно при объединении свойств.
Причина этого в том, что на самом деле небезопасно (может испортить стек отладчика), если lldb вызывает функцию, возвращающую struct (например, свойство "frame" в UIView), используя скалярное соглашение о вызовах.Таким образом, lldb очень осторожен, чтобы знать типы элементов в выражении перед его вызовом.Если lldb не может понять это из отладочной информации, может потребоваться дополнительное приведение, чтобы осчастливить средство проверки типов.
Обратите внимание, lldb делает одно исключение из требования, что мы знаем типы в выражениях, которые могут учитыватьразличия вы упомянули.Если мы увидим:
[<some expression whose type we don't know> someSelector]
как выражение или подвыражение, мы перепишем это как:
[(id) <some expression whose type we don't know> someSelector]
Это казалось разумным подспорьем, поскольку единственное, что имеет смыслотправить сообщение ObjC на это «id».Так что любая ошибка будет бессмысленной и, как мы надеемся, менее вероятной.Это означает, что цепочка обращений к методу, что все возвращаемые "id" будут разрешены, когда эквивалент.форма не сможет выполнить проверку типов.
Это все грязные углы работы с неполной информацией о типах во время отладки.Обратите внимание, что многие из этих проблем решаются либо сборкой вашей программы с использованием модулей (-fmodule
и -gmodule
), либо эквивалентным образом путем выдачи:
(lldb) выражения @import UIKit
как частивашего сеанса отладки.Тогда lldb узнает все типы из UIKit, и синтаксический анализатор выражений сможет сделать лучше.