← Назад к вопросам

Какие знаешь команды LLDB?

1.7 Middle🔥 122 комментариев
#Тестирование и отладка

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные команды LLDB для iOS-разработчика

LLDB (Low Level Debugger) — это отладочный движок, используемый в Xcode, который пришел на смену GDB. Он предоставляет мощные возможности для отладки iOS-приложений. Я активно использую его в ежедневной работе, разделю команды на ключевые категории.

Управление выполнением программы

# Основные команды контроля потока
process continue (или c)         # Продолжить выполнение
thread step-over (или n)         # Шаг с обходом (next)
thread step-in (или s)           # Шаг с заходом (step in)
thread step-out (или finish)     # Шаг с выходом
thread step-inst (или si)        # Шаг на уровне инструкций

Остановки (breakpoints) — фундаментальный инструмент:

breakpoint set (или b)           # Установить точку останова
breakpoint set -n viewDidLoad    # Остановка на методе
breakpoint set -f ViewController.swift -l 42
breakpoint list                  # Список всех точек
breakpoint delete 1              # Удалить точку с ID 1
breakpoint disable/enable        # Включить/выключить точку

Работа с данными и памятью

Выражения и вывод значений — одна из самых полезных возможностей:

expression (или e)               # Вычислить выражение
po object                        # Вывести описание объекта
p variable                       # Распечатать значение
frame variable                   # Показать локальные переменные

Пример использования в контексте Swift:

// В точке останова в коде:
po self.view.subviews.count      // Количество сабвью
p self.title                     // Распечатать заголовок
e self.view.backgroundColor = .red // Изменить цвет

Проверка памяти и адресов:

memory read/32bx 0x1234          # Чтение памяти в hex
memory write 0x1234 0x5          # Запись в память
register read                    # Чтение регистров

Анализ стека вызовов и потоков

Работа со стеком критична при анализе сложных ошибок:

thread backtrace (или bt)        # Трассировка стека текущего потока
bt all                           # Трассировка всех потоков
frame select 2                   # Перейти к фрейму #2
frame info                       # Информация о текущем фрейме
thread list                      # Список всех потоков
thread select 3                  # Выбрать поток #3

Расширенные возможности и настройки

Визуализация данных через команды форматирования:

type format add -f hex NSInteger # Вывод в hex формате
type summary add UIView -s "${var.frame}" 
                                 # Кастомный summary для UIView

Работа с образами и модулями:

image list                       # Список загруженных библиотек
image lookup -r UIView           # Поиск символов
image lookup -a 0x1234           # Поиск по адресу

Практические сценарии использования:

  • Отладка рекурсивных вызовов: bt для анализа глубины стека
  • Анализ утечек памяти: проверка адресов объектов через po
  • Динамическое изменение UI: e UIView.animate(withDuration: 0.3) { ... }
  • Отладка многопоточных проблем: thread list и анализ состояния потоков

Полезные трюки и советы

  • Используйте .lldbinit файл для настройки алиасов и автоматизации
  • Комбинация breakpoint command add позволяет выполнять скрипты при срабатывании точек останова
  • Регулярные выражения в breakpoints: breakpoint set -r "\\[UIView.*\\]"
  • Для Swift используйте полные имена типов с пространством имен: MyApp.ViewController

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

В профессиональной разработке особенно ценятся команды для инспекции памяти, анализа конкурентных проблем и динамического изменения состояния приложения без пересборки.