Ответ 1
Моя практика:
po [NSUserDefaults standardUserDefaults]
отображает: < NSUserDefaults: 0x6143040 >
po [[NSUserDefaults standardUserDefaults] stringForKey:@"Currency"]
отображает: "CHF"
Я работаю над iPhone-приложением. Я полный разработчик Java, и я привык использовать Eclipse, где я могу поставить точку останова и остановить процесс. Затем я могу ввести любое выражение, которое хочу, и Eclipse будет оценивать его с использованием значений из этой точки процесса.
Есть ли способ сделать это в Xcode? Я хочу иметь возможность остановиться на точке останова, а затем ввести код для его оценки. Консоль gdb позволит мне сделать po
(print-object), но она действительно ограничена. Любая помощь?
Моя практика:
po [NSUserDefaults standardUserDefaults]
отображает: < NSUserDefaults: 0x6143040 >
po [[NSUserDefaults standardUserDefaults] stringForKey:@"Currency"]
отображает: "CHF"
В XCode 4.0 это похоже на скрытый в графическом интерфейсе. Когда вы находитесь в точке останова, вы, возможно, увидите представление переменных в области отладки; это панель, которая показывает локальные переменные и таковые. Щелкните правой кнопкой мыши на представлении "Переменные" и выберите "Добавить выражение..."
Я понимаю, что это старый поток, но он по-прежнему является лучшим хитом Google, поэтому я счел нужным ответить.
Используйте команду "выражение" в отладчике. Использование этого относительно просто. Просто введите командное выражение и нажмите enter. Затем вам будет предложено ввести выражение. Вот пример
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
2+2
(int) $2 = 4
Я также добавил справочную информацию для команды выражения ниже. Надеюсь, это поможет.
Вычислить выражение C/ObjC/С++ в текущем контексте программы, используя пользователя определенных переменных и переменных, находящихся в настоящее время в области. Эта команда принимает "необработанный" вход (нет необходимости цитировать материал).
Синтаксис: выражение -
Использование команд: выражение [-f] [-G] [-a] [-d] [-t] [-u] - выражение [-o] [-a] [-d] [-t] [-u] - выражение
-G <gdb-format> ( --gdb-format <gdb-format> )
Specify a format using a GDB format specifier string.
-a <boolean> ( --all-threads <boolean> )
Should we run all threads if the execution doesn't complete on one
thread.
-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.
-t <unsigned-integer> ( --timeout <unsigned-integer> )
Timeout value for running the expression.
-u <boolean> ( --unwind-on-error <boolean> )
Clean up program state if the expression causes a crash, breakpoint
hit or signal.
Таймауты: Если выражение может быть оценено статически (без кода запуска), то оно будет. В противном случае по умолчанию выражение будет выполняться в текущем потоке с коротким таймаутом: в настоящее время .25 секунд. Если в это время он не вернется, оценка будет прервана и возобновил работу всех потоков. Вы можете использовать параметр -a для отключения повторной попытки на всех потоки. Вы можете использовать опцию -t, чтобы установить более короткий тайм-аут.
Пользовательские переменные: Вы можете определить свои собственные переменные для удобства или использовать в последующих выражениях. Вы определяете их так же, как вы определяете переменные в C. Если первый символ ваша пользовательская переменная равна $, тогда значение переменной будет доступно в будущем выражения, иначе он будет доступен только в текущем выражении.
Примеры:
expr my_struct->a = my_array[3]
expr -f bin -- (index * 8) + 5
expr unsigned int $foo = 5
expr char c[] = "foo"; c[0]
ВАЖНОЕ ПРИМЕЧАНИЕ. Поскольку эта команда принимает "сырой" ввод, если вы используете какие-либо команды, вы должны использовать '-' между окончанием параметров команды и начало исходного ввода.
Не отвечая на вопрос о Xcode, но AppCode JetBrains делает это стандартным способом IDE, который большинство из нас знает с других платформ.