В XCode GDB позволяет вам изменять локальные переменные во время отладки (смотрите, как изменить значение NSString при отладке в XCode? ). LLDB предлагает аналогичную функциональность? Если так, как мы можем использовать это?
В XCode GDB позволяет вам изменять локальные переменные во время отладки (смотрите, как изменить значение NSString при отладке в XCode? ). LLDB предлагает аналогичную функциональность? Если так, как мы можем использовать это?
Ответы:
expr myString = @"Foo"
(lldb) help expr
Оценивает выражение C / ObjC / C ++ в контексте текущей программы, используя переменные, находящиеся в настоящее время в области видимости. Эта команда принимает необработанный ввод (не нужно заключать в кавычки).Синтаксис: выражение -
Параметры команды Использование: выражение [-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"; с [0]ВАЖНОЕ ПРИМЕЧАНИЕ: Поскольку эта команда принимает «необработанный» ввод, если вы используете какие-либо параметры команды, вы должны использовать «-» между концом параметров команды и началом необработанного ввода.
«expr» - это сокращение от «expression»
'expr myLabel.text = @"hello!"
но я получаю error: property 'text' not found on object of type 'UILabel *'
... Есть мысли?
expr (void)[label setText:@"Foo"]
должен сделать это. Dot-синтаксис обычно не работает в отладчике. lldb, вероятно, интерпретирует это так, как вы хотели получить доступ к члену c-struct, но я не уверен, что по этой причине это не сработает. Dot-синтаксис не работает po
ни для одного. вместо po label.text
тебя надо использоватьpo [label text]
@property
.
p
в качестве ярлыка для expr
. Пример:(lldb) p url = @"http://google.com"
e
в качестве ярлыка для expr
. Кстати, p
это псевдоним для печати, который является псевдонимом expr --
(просто оценивает необработанный ввод, без флагов) expr -o -- [object]
или, po
как правило, дает более полезный вывод для объектов.
Следующий материал работает для меня. Я использую Xcode 8.
Если вы хотите установить некоторую переменную (например, «dict») в ноль, а затем протестировать поток кода, вы можете попробовать следующее.
Это будет выглядеть примерно так, как в консоли.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil