Next: , Previous: Altering, Up: Altering


11.1 変数への代入

ある変数の値を変更するには、 代入式を評価します。 See Expressions。 例えば、

     print x=4

は、 変数xに値4を格納してから、 その代入式の値 (すなわち4) を表示します。 サポートされている言語の演算子の詳細情報については、 See Using GDB with Different Languages

代入の結果を表示させることに関心がなければ、 printコマンドの代わりにsetコマンドを使用してください。 実際のところsetコマンドは、 式の値が表示もされず、 値ヒストリ (see Value history) にも入らないということを除けば、 printコマンドと同等です。 式は、 その結果の入手だけを目的として評価されます。

setコマンドの引数となる文字列の先頭の部分が、 setコマンドのサブ・コマンドの名前と一致してしまうような場合には、 ただのsetコマンドではなくset variableコマンドを使用してください。 このコマンドは、 サブ・コマンドを持たないという点を除けば、 setコマンドと同等です。 例えば、 ユーザ・プログラムにwidthという変数がある場合、 ‘set width=13’によってこの変数に値を設定しようとするとエラーになります。 これは、 GDBがset widthというコマンドを持っているためです。

     (gdb) whatis width
     type = double
     (gdb) p width
     $4 = 13
     (gdb) set width=47
     Invalid syntax in expression.

ここで不正な表現となっているのは、 もちろん‘=47’の部分です。 プログラム内の変数widthに値を設定するには、 以下のようにしてください。

     (gdb) set var width=47

GDBは、 代入時の暗黙の型変換をC言語よりも多くサポートしています。 整数値を自由にポインタ型変数に格納できますし、 その逆もできます。 また、 任意の構造体を、 同じサイズの別の構造体、 または、 より小さいサイズの別の構造体に変換することができます。

メモリ上の任意の箇所に値を格納するには、 指定されたアドレスにおいて指定された型の値を生成するために、 ‘{...}’を使用します (see Expressions)。 例えば{int}0x83040は、 メモリ・アドレス0x83040を整数値として参照します (メモリ上における、 ある特定のサイズと表現を示唆しています)。 また、

     set {int}0x83040 = 4

は、 そのメモリ・アドレスに値4を格納します。