web-dev-qa-db-ja.com

XcodeのLLVMでデバッグ中に変数値を変更するにはどうすればよいですか?

Xcodeでは、GDBを使用して、デバッグ中にローカル変数を変更できます( XCodeでデバッグ中にNSString値を変更する方法 を参照)。 LLDBは同様の機能を提供しますか?もしそうなら、どのように使用できますか?

158
Eric
expr myString = @"Foo"

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

構文:expression-

コマンドオプション使用法:式[-f] [-G] [-d] [-u]-式[-o] [-d] [-u]-式

   -G <gdb-format>  ( --gdb-format <gdb-format> )
        Specify a format using a GDB format specifier string.

   -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.

   -u <boolean>  ( --unwind-on-error <boolean> )
        Clean up program state if the expression causes a crash, breakpoint
        hit or signal.

例:

expr my_struct-> a = my_array [3]
expr -f bin-(インデックス* 8)+ 5
expr char c [] = "foo"; c [0]

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

「expr」は「expression」の略語です

252
Matthias Bauch

次のものは私のために動作します。 Xcode 8を使用しています。

いくつかの変数(「dict」など)をnilに設定して、コードフローをテストする場合は、次を試してください。

  1. 目的の値に初期化した後、ブレークポイントを適切に配置します。
  2. 次に、lldbコマンドラインで「expression dict = nil」を実行して変更します。 (たとえば、「nil」)
  3. ブレークポイントを越えます。
  4. 次の行の変数「dict」を確認します。ゼロになります。

コンソールのようになります。

(lldb) expression dict = nil
(NSDictionary *) $5 = nil
14
arango_86