web-dev-qa-db-ja.com

デバッグ中に式を評価するXcode

私はiPhoneアプリに取り組んでいます。私はフルタイムのJava開発者であり、ブレークポイントを設定してプロセスを停止できるEclipseを使用することに慣れています。その後、任意の式を入力すると、Eclipseはプロセスのその時点からの値を使用して評価します。

Xcodeでそれを行う方法はありますか?ブレークポイントで停止し、それを評価するためのコードを入力したいです。 gdbコンソールでpoprint-object )を実行できますが、実際には制限があります。何か助け?

56

私の練習:

po [NSUserDefaults standardUserDefaults]

表示:<NSUserDefaults:0x6143040>

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

表示:"CHF"

48
Peter

XCode 4.0では、これはGUIに隠されています。ブレークポイントにいるときは、おそらくデバッグ領域内に変数ビューが表示されます。ローカル変数などを表示するペインです。変数ビューを右クリックして、「式を追加...」を選択します

これは古いスレッドであることがわかっていますが、それでもGoogleのトップヒットであるため、回答する価値があると考えました。

88
Belden Fox

デバッガーで「式」コマンドを使用します。使用方法は比較的簡単です。コマンド式を入力してEnterキーを押すだけです。その後、式を入力するよう求められます。ここに例があります

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

(int) $2 = 4

また、以下に式コマンドのヘルプ情報を添付しました。お役に立てれば。

ユーザー定義変数と現在スコープ内の変数を使用して、現在のプログラムコンテキストでC/ObjC/C++式を評価します。このコマンドは「生の」入力を取ります(ものを引用する必要はありません)。

構文:expression-

コマンドオプション使用法:式[-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]

重要な注意:このコマンドは「生」の入力を受け取るため、コマンドオプションを使用する場合は、コマンドオプションの最後と生の入力の最初の間に「-」を使用する必要があります。

14
Jeff Ames

Xcodeについての質問には答えませんが、JetBrainsのAppCodeは、これを標準のIDE他のプラットフォームから知っている方法で行います。

6
Renetik