デバッガで「式」コマンドを使用します。それを使用するのは比較的簡単です。コマンド式を入力してEnterキーを押してください。式を入力するよう求められます。ここに例があります
(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.
タイムアウト: 式(コードを走っずに)静的に評価することができる場合、それはなります。 それ以外の場合、デフォルトでは、式は現在のスレッドで短時間のタイムアウトで実行されます。 現在は.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]
重要な注意:このコマンドは、「生の」入力がかかるので、あなたがどんな コマンドオプションを使用する場合は、使用する必要があります「 - 」コマンドオプション の終わりと始まりの間生の入力の
「po」とは何ですか? gdbコンソールを使用すると、大量の任意の関数を評価できます。特にあなたがやろうとしているところは何ですか? –
"po"は印刷オブジェクトです。 Appleのgccの拡張で、* description *メッセージがObjCインスタンスに送信され、その記述を返します。 – diciu
ああ、それは私がそれを聞いたことがない理由です。楽しい。 –