Какие основные команды отладчика LLDB ты знаешь?

Ответ

Ключевые команды LLDB для отладки iOS/macOS приложений:

  • po (print object) – вычисляет и выводит описание объекта, используя его debugDescription. Основная команда для инспекции объектов.
    (lldb) po someViewController.view
    (lldb) po myArray.count
  • p (print) – вычисляет выражение и выводит результат с указанием типа. Часто используется для примитивных типов.
    (lldb) p self.view.frame.size.width
  • expr (expression) – позволяет выполнить произвольное выражение Swift/Objective-C, изменяя состояние программы в рантайме.
    (lldb) expr self.view.backgroundColor = UIColor.red
    (lldb) expr let $newVar = 42
  • bt (backtrace) – выводит стек вызовов (call stack) текущего потока.
  • frame variable – показывает все локальные переменные в текущем кадре стека. Сокращенно fr v.
  • breakpoint set – устанавливает точку останова.
    (lldb) breakpoint set -n "-[MyClass myMethod:]"  # По имени метода
    (lldb) breakpoint set -f ViewController.swift -l 42  # По файлу и строке
  • image lookup – полезен для диагностики крашей. Например, поиск символа по адресу.
    (lldb) image lookup -a 0x0000000100003a00

Ответ 18+ 🔞

Слушай, вот ты сидишь, дебажишь своё приложение, а оно, сука, как назло, падает в самом неожиданном месте. И ты такой: "Ну что за хуйня?". А всё потому, что без правильных команд в LLDB ты как слепой котёнок — только тыкаешься носом в экран и орешь. Ёпта, давай разберём эту магию, чтобы ты не выглядел полным лузером.

Вот, например, святая святых — команда po. Это твои глаза и уши, блядь. Хочешь посмотреть, что там внутри у объекта твоего? Не надо строить догадки, как гадалка на вокзале. Просто вбей po someViewController.view и получи развёрнутый ответ, как будто этот объект сам тебе на коленки сел и всё про себя рассказал. Красота же!

А если тебе нужно не просто посмотреть, а ещё и что-то поменять на лету, чтобы не перезапускать сборку, которая, как всегда, собирается овердохуища времени? На помощь приходит expr. Это твоя волшебная палочка, ёбана. Захотел покрасить вьюху в красный? expr self.view.backgroundColor = UIColor.red — и готово, пиздец. Создать временную переменку? expr let $newVar = 42 — и вот она, твоя переменная, живая и здоровая. Главное — не увлекись, а то наломаешь таких дров, что потом и не соберёшь.

Ну а когда приложение всё-таки накрылось медным тазом и ты видишь лишь адрес в логах, от которого волосы дыбом встают, не паникуй. Не надо материть всех подряд. Берёшь команду image lookup -a и подсовываешь ей этот адрес. Она тебе, хитрая жопа, тут же раскажет, какой именно метод или переменная по этому адресу жили. Это как детектив по расследованию убийств, только для кода.

И запомни, чувак: p — для примитивов (циферки, булево и прочая мелочь), а po — для объектов, чтобы они свои debugDescription показали. Не путай, а то будешь выглядеть как манда с ушами.

Короче, бери эти команды, вбивай их в свою башку и пользуйся. А то будешь сидеть и бздеть от каждой ошибки, как новичок. Удачи, ебушки-воробушки.