bt
- немного необычный ярлык lldb для thread backtrace
.bt
покажет вам последовательность вызовов, которые привели вас к точке останова.Если какая-либо из вызывающих функций в стеке имеет отладочную информацию, lldb также выведет аргументы функции.Это наиболее полезная вещь, которую нужно делать при достижении точки останова, поскольку она отвечает на более общий вопрос «где я».
po $arg1
- это гораздо более специализированная вещь.
$arg1
- это сокращение от lldb для регистра, используемого для передачи первого аргумента функции.Если вы используете первую инструкцию функции, то этот регистр будет содержать значение, переданное при вызове функции.Однако обратите внимание, что $arg1
на самом деле является просто именем регистра, поэтому, если этот регистр используется повторно - например, когда функция, в которой вы остановлены, вызывает другую функцию, значение входящего аргумента будет перезаписано.Таким образом, $arg1
означает «первый аргумент» только в том случае, если вы остановлены в самом начале функции.
po
- сокращение от expr -O --
.Он оценивает переданное ему выражение, а затем, если результатом является объект ObjC или Swift, вызывает в среду выполнения для получения пользовательского описания объекта и печатает его.В противном случае он печатает значение.
Так po $arg1
печатает описание объекта для первого аргумента функции, если вы остановились в начале функции.Чаще всего это используется для того, чтобы все методы ObjC принимали параметр self
в качестве первого аргумента.Поэтому, если вы остановитесь в начале метода, po $arg1
выведет описание объекта параметра self
.