Next: , Previous: Value History, Up: Data


8.9 コンビニエンス変数

GDBのコンビニエンス変数は、 GDBの中にある値を保持しておいて、 それを後に参照するという目的で使用することができます。 これらの変数は、 GDB内部においてのみ存在するものです。 それらはユーザ・プログラムの中に存在するものではなく、 コンビニエンス変数を設定してもユーザ・プログラムの実行には直接影響を与えません。 したがって、 ユーザはこれを自由に使用することができます。

コンビニエンス変数名は、 先頭が‘$’で始まります。 ‘$’で始まる名前は、 あらかじめ定義されたマシン固有のレジスタ名 (see Registers) と一致しない限り、 コンビニエンス変数の名前として使用することができます (これに対して、 値ヒストリの参照名では‘$’に続けて番号を記述します。 See Value history)。

ユーザ・プログラムの中で変数に値を設定するのと同じように、 代入式を使用してコンビニエンス変数に値を保存することができます。 例えば、 object_ptrが指すオブジェクトが保持する値を$fooに保存するには、 以下のようにします。

     set $foo = *object_ptr

コンビニエンス変数は、 最初に使用されたときに生成されますが、 新しい値を割り当てるまで、 その値は空 (void) です。 値は、 いつでも代入することによって変更可能です。

コンビニエンス変数には決まった型はありません。 コンビニエンス変数には、 既に異なる型のデータが割り当てられている場合でも、 構造体や配列を含めた任意の型のデータを割り当てることができます。 コンビニエンス変数は、 式として使用される場合には、 その時点における値の型を持ちます。

show convenience
それまでに使用されたコンビニエンス変数とその値の一覧を表示します。 省略形は、 show conです。

コンビニエンス変数の1つの使い方に、 インクリメントされるカウンタや先へ進んでいくポインタとしての使い方があります。 例えば、 構造体配列の中の連続する要素のあるフィールドの値を表示したい場合、 以下のコマンドを<RET>キーで繰り返し実行します。

     set $i = 0
     print bar[$i++]->contents

GDBによって、 いくつかのコンビニエンス変数が自動的に作成され、 役に立ちそうな値が設定されます。

$_
$_変数には、 xコマンドによって最後に調べられたアドレスが自動的に設定されます (see Examining memory)。 xコマンドによって調べられるデフォルトのアドレスを提供する他のコマンドも、 $_にそのアドレスを設定します。 このようなコマンドには、 info lineinfo breakpointがあります。 $_の型は、 xコマンドによって設定された場合は$__の型へのポインタであり、 それ以外の場合はvoid *です。


$__
$__変数には、 xコマンドによって最後に調べられたアドレス位置にある値が自動的に設定されます。 型は、 データが表示されたフォーマットに適合するように選択されます。
$_exitcode
$_exitcode変数には、 デバッグされているプログラムが終了した際の終了コードが自動的に設定されます。