Ответ 1
Точечная запись для отправки сообщений не поддерживается в lldb. Используйте условное обозначение скобки и передайте результат в CGRect:
p (CGRect)[view frame]
Я пытаюсь отладить мое приложение iOS с помощью lldb, и я получаю действительно странные ошибки при отладке.
Несколько строк перед моей точкой останова, я получил:
CGRect frame = view.frame;
Я могу получить доступ без проблем с командой print frame
в lldb. Однако, когда я пытаюсь получить доступ к кадру снова в lldb, я набираю print view.frame
и получаю следующую ошибку:
error: property 'frame' not found on object of type 'UIView *'
Это не имеет смысла, поскольку я могу проверить, что view
является экземпляром UIView*
и имеет допустимое свойство, называемое фреймом, набрав po view
и получив правильные результаты:
(UIView *) $4 = 0x1e199bf0 <MyAppCustomView: 0x1e199bf0; frame = (3398 3396; 204 208); layer = <CALayer: 0x1e199ce0>>
Эта конкретная ошибка lldb случается со мной много, и я не мог найти причину этой ошибки. Кто-то предложил в "счетчик" не найден на объекте типа "NSMutableArray *" команды PO в lldb, что можно использовать gdb как (gdb) p view.frame
, но я получаю error: '(gdb)' is not a valid command.
и я очень подозреваю, что команда gdb "работает"? внутри другого отладчика в любом случае.
Любые предложения или обходные пути для этой ошибки, которые происходят случайным образом?
Точечная запись для отправки сообщений не поддерживается в lldb. Используйте условное обозначение скобки и передайте результат в CGRect:
p (CGRect)[view frame]
На всякий случай вышеуказанное не работает (что не для меня, ища фрейм для переменной ячейки, класс, полученный из UITableViewCell): заставляя лишние скобки, похоже, помогать lldb мало мозгового мозга:
p ((CGRect)[cell frame])
presto magico:
(CGRect) $5 = origin=(x=0, y=0) size=(width=320, height=44)