Заметки по отладке iOS приложений
Опубликовано:
LLDB init
Команды, которые можно выполнять в консоли, можно добавить в ~/.lldbinit файл, чтобы они выполнялись во время запуска консоли. Обычно тут происходит импорт других скриптов и объявление aliasов.
command script import ~/nameScript.py
command alias poc expression -l objc -O --
command alias 🚽 expression -l objc -- (void)[CATransaction flush]Выход из метода возвращая конкретный результат
Полезно, если необходимо не перезапуская программу и не меняя исходников сделать так, чтобы метод вернул какой-то другой результат. Необходимо выполнить следующую команду в консоли Xcode:
thread return NOВызов приватного API
expression -l objc -O -- [self.view recursiveDescription]Если вы объявили alias с именем poc из раздела LLDB init, то можно выполнить тоже самое следующей командой:
poc [self.view recursiveDescription]Вызвать функцию из консоли и остановиться на breakpoint
expr -i 0 -- [self view]Symbolic breakpoint one shot in other breakpoint
- Ставим брекпоинт перед вызовом нужного нам метода, например
UILabel setText: - Добавляем брейкпоинту Action с выражением:
brekpoint set --one-shot true --name "-[UILabel setText:]" - Ставим галочку "Автоматически продолжить после выполнения Action"
Call method with other args
- Ставим брекпоинт на метод, который хотим вызвать с другими параметрами, например
changeName(animation: true)будем вызывать сanimation = false - Добавляем Action:
thread jump --by 1, чтобы пропустить его вызов - Добавляем Action:
expression changeName(animation: false) - Ставим галочку "Автоматически продолжить после выполнения Action"
Поправить constraint без перезапуска приложения (View Debugger)
Найти constraint во ViewDebugger. Выделить его и скопировать (⌘C)
e [((NSLayoutConstraint*)0xfffffffff) setConstant: -30]
e CATransaction.flush()