Ответ
1. Отладчик LLDB (консоль в нижней панели Xcode):
po(print object) — выводит описание объекта (вызываетdescription/debugDescription).p(print) — выводит значение с информацией о типе.expr— позволяет выполнить выражение во время выполнения.fr v(frame variable) — показывает локальные переменные в текущем кадре стека.(lldb) po myArray.count (lldb) expr myArray.append("newItem")
2. Визуальные инструменты:
- View Debugger (кнопка с иерархией кубов): показывает 3D-развертку UI, проверку констрейнтов и свойства каждого
UIView. - Memory Graph Debugger (кнопка с графом): визуализирует объекты в памяти, помогает находить циклы сильных ссылок (retain cycles).
3. Инструменты производительности (Instruments): Запуск: Product -> Profile (Cmd+I).
- Time Profiler — анализ загрузки CPU, поиск "узких" мест.
- Allocations — отслеживание выделения и освобождения памяти.
- Leaks — автоматический поиск утечек памяти.
- Network — анализ сетевых запросов (длительность, объем данных).
4. Специализированные утилиты:
- Network Link Conditioner (дополнительная загрузка в Xcode) — симуляция различных условий сети (3G, потерянные пакеты, высокая задержка).
- Консоль macOS (Console.app) — просмотр системных логов и логов устройства, включая
os_logсообщения.
5. Практический совет: Используйте символьные точки останова (Symbolic Breakpoint) для остановки на конкретных системных событиях (например, -[UIViewController viewDidLoad]) без модификации кода.
Ответ 18+ 🔞
А, ну вот, смотри, опять этот твой проект накрылся медным тазом, и ты смотришь на экран как баран на новые ворота? Не беда, я тебе сейчас, как шаман, все косточки твоему коду по полочкам разложу. Запоминай, а лучше записывай, пока не забыл.
Первое и самое простое — отладчик LLDB, эта консолька внизу Xcode. Там не просто так кнопочки мигают.
po— это твоя правая рука. Хочешь посмотреть, что внутри объекта твоего валяется?po myArrayи вуаля — тебе вывалит всю его душу, то есть результатdescription. Количество элементов?po myArray.count— элементарно, Ватсон.p— это какpo, но для зануд. Выдаст не только значение, но и тип, чтоб ты знал, с чем имеешь дело.expr— это вообще магия. Застрял на брейкпоинте и понял, что надо срочно в массив чот добавить? Без проблем,expr myArray.append("newItem")и жизнь налаживается прямо на лету.fr v— когда совсем всё хуёво и ты забыл, какие переменные вокруг тебя вообще есть. Покажет всех местных обитателей текущего кадра стека.
(lldb) po myArray.count
(lldb) expr myArray.append("newItem")
Второе — визуальные штуки. Ты ж не просто так вёрстку мучал? Смотри:
- View Debugger (кнопка с кубиками, напоминает игру тетрис). Тыкаешь на неё — и твой интерфейс разбирается на запчасти в 3D. Видно сразу, какая вьюха куда влезла, какие констрейнты её держат и почему эта чёртова кнопка уехала за экран. Просто находка для тех, у кого глаза уже квадратные.
- Memory Graph Debugger (кнопка с графом-паутинкой). Вот это, блядь, мощнейшая вещь! Она показывает, кто на кого в памяти ссылается. Увидел на графе кучу объектов, которые держат друг друга за жопу мертвой хваткой — поздравляю, ты нашёл retain cycle, из-за которого память не утекает, а вытекает полноводной рекой.
Третье — Instruments. Это не просто «Профиль» в меню, это целый арсенал. Запускаешь через Product -> Profile (Cmd+I) и обалдеваешь от количества инструментов.
- Time Profiler — показывает, какой кусок кода жрёт твой процессор как не в себя. Нашёл красненький столбик — нашёл место, где всё тормозит. Волшебство, ёпта.
- Allocations — следит за каждым байтом памяти. Видишь, что память растёт как на дрожжах, а не падает — начинай копать тут.
- Leaks — само название говорит. Сам найдёт, где ты память забыл отпустить. Правда, иногда и ложные срабатывания бывают, но в целом — спасатель.
- Network — для тех, кто работает с сетью. Покажет, сколько данных качается, как долго и не шлёшь ли ты на сервер какую-нибудь дичь по десять раз.
Четвёртое — спецутилиты, про которые многие забывают.
- Network Link Conditioner — её надо отдельно скачать (в Additional Tools for Xcode). Включаешь — и можешь симулировать, что твое приложение работает на дрянном 3G в лифте. Очень быстро вылезают все баги, связанные с медленной сетью или таймаутами.
- Консоль macOS (Console.app) — это не про Xcode, но про дебаг. Туда летят все системные логи и твои
os_logсообщения. Когда приложение на тестовом устройстве крешится без видимой причины, первым делом лезь сюда. Часто ответ на поверхности, просто его надо уметь прочитать.
И на закуску практический совет, который сэкономит тебе кучу нервов. Символьные точки останова (Symbolic Breakpoint). Это жесть, как удобно! Не надо лезть в каждый файл и пихать print или брейкпоинт. Хочешь ловить момент, когда у любого UIViewController вызывается viewDidLoad? Создаёшь symbolic breakpoint, пишешь -[UIViewController viewDidLoad] — и всё, ты в дамках. Приложение само остановится в нужный момент, и ты сможешь посмотреть, что происходит. Красота, а не инструмент.
Вот так вот, коротко и без лишней воды. А теперь иди и дебажь, у тебя всё получится. Главное — не паниковать.