マシン・レジスタの内容は、
先頭が‘$’で始まる名前を持つ変数として、
式の中で参照することができます。
レジスタの名前は、
マシンによって異なります。
info registers
コマンドを使用することで、
そのマシンで使用されているレジスタの名前を知ることができます。
info registers
info all-registers
info registers
regname ...
GDBは、
そのマシン・アーキテクチャが持つレジスタの正規のニーモニックと衝突しない限り、
ほとんどのマシン上
(の式の中)
において利用可能な、
4つの「標準的」なレジスタ名を持っています。
レジスタ名$pc
と$sp
は、
プログラム・カウンタ・レジスタとスタック・ポインタを指すために使われます。
$fp
は、
カレントなスタック・フレームへのポインタを保持するレジスタを指すために使われます。
$ps
は、
プロセッサの状態を保持するレジスタを指すために使われます。
例えば、
プログラム・カウンタの値を16進数で表示するには、
以下のように実行します。
p/x $pc
また、 次に実行される命令を表示するには、 以下のように実行します。
x/i $pc
さらに、 スタック・ポインタ 1 に4を加えるには、 以下のように実行します。
set $sp += 4
可能な場合にはいつでも、
これら4つの標準的なレジスタ名が使用可能です。
ユーザのマシンが異なる正規のニーモニックを使用している場合でも、
名前の衝突さえ起こらなければ、
使用可能です。
info registers
コマンドにより、
正規名を見ることができます。
例えば、
SPARC上で
info registers
コマンドを実行すると、
プロセッサ・ステータス・レジスタは$psr
と表示されますが、
このレジスタを$ps
として参照することもできます。
レジスタがこの方法で調べられるとき、 GDBは普通のレジスタの内容を常に整数値とみなします。 マシンによっては、 浮動小数点値以外を保持できないレジスタを持つものがあります。 このようなレジスタは、 浮動小数点値を持つものとみなされます。 普通のレジスタの内容を浮動小数点値として参照する方法はありません (‘print/f $regname’により、 浮動小数点値として値を表示することはできます)。
レジスタには、
rawとvirtualの2つの異なるデータ形式を取るものがあります。
これは、
オペレーティング・システムによってレジスタの内容が保存されるときのデータ形式が、
ユーザ・プログラムが通常認識しているものと同じではないことを意味しています。
例えば、
68881浮動小数点コプロセッサのレジスタの値は常にextended
(raw)形式で保存されていますが、
C言語によるプログラムは通常double
(virtual)形式を想定しています。
このような場合、
GDBは通常
(ユーザ・プログラムにとって意味のある形式である)
virtual形式だけを扱いますが、
info registers
コマンドはデータを両方の形式で表示してくれます。
通常、 レジスタの値は、 選択されたスタック・フレーム (see Selecting a frame) と関係を持つ相対的な値です。 これは、 ユーザにレジスタの値として見えるものは、 選択されたフレームから呼び出されているすべてのスタック・フレームが終了し、 退避されたレジスタの値が復元されたときに、 そのレジスタが持つであろう値です。 ハードウェア・レジスタの本当の値を知りたければ、 最下位のフレームを (‘frame 0’で) 選択しなければなりません。
しかし、 GDBは、 コンパイラが生成したコードから、 どこにレジスタが保存されているかを推論する必要があります。 退避されていないレジスタがある場合や、 GDBが退避されたレジスタを見つけることができない場合は、 どのスタック・フレームを選択していても結果は同じです。
set rstack_high_address
addressset rstack_high_address
コマンドによってレジスタ・スタックの最終アドレスを指定することによって、
この問題を回避することができます。
引数はアドレスでなければなりません。
‘0x’を先頭に記述することで、
アドレスを16進数で指定することができます。
show rstack_high_address
[1] 原注:これは、
スタックがメモリの下位方向に伸長するマシン
(最近のほとんどのマシンがそうです)
上において、
スタックから1ワードを取り除く方法です。
これは、
最下位のスタック・フレームが選択されていることを想定しています。
これ以外のスタック・フレームが選択されているときには、
$sp
に値を設定することは許されません。
マシン・アーキテクチャに依存することなくスタックからフレーム全体を取り除くには、
return
を使用します。
See Returning from a function。