Ответ
Команда po (print object) в LLDB опасна тем, что выполняет код с побочными эффектами, что может необратимо изменить состояние отлаживаемой программы.
Основные риски:
- Неожиданные изменения состояния:
poвычисляет выражение, вызывая геттеры и методыdescription/debugDescription. Если они модифицируют свойства, это приводит к багам.class RiskyClass { private var accessCount = 0 var description: String { accessCount += 1 // ПОБОЧНЫЙ ЭФФЕКТ! return "Accessed (accessCount) times" } } let obj = RiskyClass() // Ввод в LLDB: `po obj` изменит внутреннее состояние `accessCount` - Снижение производительности: Сложная логика в
descriptionможет быть ресурсоемкой. - Краши: При обращении к освобожденным (zombie) объектам через динамическую диспетчеризацию.
Безопасные альтернативы:
pилиprint: Выводят значение без вызоваdescription.frame variable: Прямой доступ к переменным в текущем стековом фрейме, самый безопасный вариант.v: Команда, аналогичнаяframe variable.
Правило: Используйте po только для инспекции простых, неизменяемых данных. Для отладки состояния используйте v или p.