Xcode оценивает выражения во время отладки - PullRequest
54 голосов
/ 28 января 2011

Я работаю над приложением для iPhone. Я полностью занятый Java-разработчик, и я привык использовать Eclipse, где я могу поставить точку останова и остановить процесс. Затем я могу ввести любое выражение, которое захочу, и Eclipse оценит его, используя значения этого момента в процессе.

Есть ли способ сделать это в Xcode? Я хочу иметь возможность остановиться на точке останова, а затем ввести некоторый код для его оценки. Консоль GDB позволит мне сделать po ( print-object ), но это действительно ограничено. Любая помощь?

Ответы [ 4 ]

86 голосов
/ 28 марта 2013

В XCode 4.0 это как бы скрыто в графическом интерфейсе.Когда вы находитесь в точке останова, вы, вероятно, можете видеть представление переменных внутри области отладки;это панель, которая показывает локальные переменные и тому подобное.Щелкните правой кнопкой мыши по представлению «Переменные» и выберите «Добавить выражение ...»

Я понимаю, что это старая ветка, но она по-прежнему пользуется популярностью у Google, поэтому я подумал, что стоит ответить.

47 голосов
/ 25 марта 2011

Моя практика:

po [NSUserDefaults standardUserDefaults]

Отображение:

po [[NSUserDefaults standardUserDefaults] stringForKey:@"Currency"]

отображает: "CHF"

14 голосов
/ 05 марта 2013

Используйте команду «expression» в отладчике. Используя это относительно просто. Просто введите выражение команды и нажмите ввод. Вам будет предложено ввести выражение. Вот пример

(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
2+2

(int) $2 = 4

Я также приложил справочную информацию для команды выражения ниже. Надеюсь, это поможет.

Оценка выражения C / ObjC / C ++ в контексте текущей программы с использованием пользователя определенные переменные и переменные в настоящее время в области. Эта команда принимает «необработанный» ввод (не нужно ничего цитировать).

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

Параметры команды Использование: выражение [-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.

Таймауты: Если выражение может быть оценено статически (без выполнения кода), то оно будет. В противном случае по умолчанию выражение будет выполняться в текущем потоке с коротким таймаутом: в настоящее время 0,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]

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

6 голосов
/ 30 января 2013

Не отвечая на вопрос о XCode, но JetBrains AppCode делает это в стандартной среде IDE, которую большинство из нас знает на других платформах.

...