Подтвердить что ты не робот

Xcode вычисляет выражения во время отладки

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

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

4b9b3361

Ответ 1

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

po [NSUserDefaults standardUserDefaults]

отображает: < NSUserDefaults: 0x6143040 >

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

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

Ответ 2

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

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

Ответ 3

Используйте команду "выражение" в отладчике. Использование этого относительно просто. Просто введите командное выражение и нажмите 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]

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

Ответ 4

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