Как изменить значение переменных во время отладки с помощью LLVM в Xcode?

В Xcode GDB позволяет вам изменять локальные переменные во время отладки (см. как изменить значение NSString во время отладки в XCode?). Имеет ли LLDB аналогичную функциональность? Если да, то как мы можем его использовать?

Ответ 1

expr myString = @"Foo"

(lldb) help expr
Вычислить выражение C/ObjC/С++ в текущем контекст программы, используя переменные, находящиеся в настоящее время в области видимости. Эта команда принимает "исходный" вход (нет необходимости цитировать материал).

Синтаксис: выражение -

Параметры команды Использование: выражение [-f] [-G] [-d] [-u] - выражение [-o] [-d ] [-u] - выражение

   -G <gdb-format>  ( --gdb-format <gdb-format> )
        Specify a format using a GDB format specifier string.

   -d <boolean>  ( --dynamic-value <boolean> )
        Upcast the value resulting from the expression to its dynamic type
        if available.

   -f <format>  ( --format <format> )
        Specify a format to be used for display.

   -o  ( --object-description )
        Print the object description of the value resulting from the
        expression.

   -u <boolean>  ( --unwind-on-error <boolean> )
        Clean up program state if the expression causes a crash, breakpoint
        hit or signal.

Примеры:

expr my_struct- > a = my_array [3]
     expr -f bin - (index * 8) + 5
expr char c [] = "foo"; c [0]

ВАЖНОЕ ПРИМЕЧАНИЕ. Поскольку эта команда принимает "сырой" вход, если вы используете какие-либо параметры команды, вы должны использовать "-" между концом параметры команд и начало исходного ввода.

'expr' является аббревиатурой для выражения '

Ответ 2

Для меня работает следующее. Я использую Xcode 8.

Если вы хотите установить некоторую переменную (например, "dict" ) на nil, а затем протестировать поток кода, вы можете попробовать следующее.

  • Положите точку останова должным образом после инициализации до желаемого значения.
  • затем выполните "выражение dict = nil" в командной строке lldb, чтобы изменить его. (например, "nil" )
  • Шаг над точкой останова.
  • Проверьте переменную "dict" в следующей строке. Это будет ноль.

Он будет выглядеть примерно как на консоли.

(lldb) expression dict = nil
(NSDictionary *) $5 = nil

Ответ 3

Если вы используете Xcode 10 или 11, правильно установите точку останова после инициализации в требуемую переменную, тогда вы можете легко изменить вашу переменную, используя po myString = "Hello World".