次: , 前: Print Settings, 上: Data


8.8 値ヒストリ

printコマンドにより表示された値は、 GDBの 値ヒストリに保存されます。 これによりユーザは、 これらの値をほかの式の中で参照することができます。 値は、 シンボル・テーブルが (例えば、 fileコマンドやsymbol-fileコマンドにより) 再読み込みされるか破棄されるまで、 維持されます。 シンボル・テーブルが変更されると、 値ヒストリが破棄されるのは、 その中の値が、 シンボル・テーブル内で定義されている型を参照しているかもしれないからです。

表示される値はヒストリ番号を与えられ、 この番号によって参照することができます。 この番号は1から始まる連続した整数です。 printコマンドは、 値に割り当てられたヒストリ番号を、 値の前に`$num = 'という形で表示します。 ここで、 numがそのヒストリ番号です。

値ヒストリの中の任意の値を参照するには、 `$'に続けてヒストリ番号を指定します。 printコマンドが出力に付加するラベルは、 ユーザにこのことを知らせるためのものです。 $単体では、 ヒストリ内の最も新しい値を参照し、 $$はその1つ前の値を参照します。 $$nは、 最新のものから数えてn番目の値を参照します。 $$2$$の1つ前の値を参照し、 $$1$$と同一、 $$0$と同一です。

例えば、 ユーザがたった今、 構造体へのポインタを表示し、 今度はその構造体の内容を見たいと考えているとしましょう。 この場合は、

     p *$

を実行すれば十分です。

また、 連結された構造体があり、 そのメンバのnextが次の構造体を指すポインタであるとすると、 次の構造体の内容を表示するには、

     p *$.next

とします。

このように連結された構造体を次々に表示するには、 このコマンドを繰り返し実行すればよく、 それは<RET>キーによって可能です。

このヒストリは、 式ではなく、 値を記録するという点に注意してください。 xの値が4のときに、 以下のコマンドを実行すると、 printコマンドによって値ヒストリに記録される値は、 xの値が変化したにもかかわらず4のままです。

     print x
     set x=5
show values
値ヒストリ内の最新の10個の値を、 項目番号付きで表示します。 これは、 `p $$9'を10回実行するようなものですが、 両者の違いは、 show valuesがヒストリを変更しないという点にあります。
show values n
値ヒストリ内の項目番号nを中心に、 その前後の10個の値を表示します。
show values +
値ヒストリ内の値のうち最後に表示されたものの直後にある10個の値を表示します。 値が存在しない場合には、 何も表示されません。

show values nを繰り返し実行するのに<RET>キーを押すことは、 `show values +'を実行するのと全く同じ結果をもたらします。