プログラムがクラッシュしたり、ユーザーが中止したり、あるいはブレークポイントに遭遇した結果、プログラムの実行途中でユーザーインタフェースに入ってしまうことがあります。(ブレークポイントについては、「ブレークポイント」で説明します。) こういった場合には、ユーザーインタフェースは自動的にすべての CPU データレジスタの値をバッファー領域に保存します。デバッグの目的のためにこれらの値は調べたり、変更することができます。
表 6-2 に SPARC のレジスタコマンドを示します。
表 6-2 SPARC レジスタコマンド
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
%g0 〜 %g7 |
( -- value ) |
指定されたグローバルレジスタの値を返します。 |
%i0 〜 %i7 |
( -- value ) |
指定された入力レジスタの値を返します。 |
%l0 〜 %l7 |
( -- value ) |
指定されたローカルレジスタの値を返します。 |
%o0 〜 %o7 |
( -- value ) |
指定された出力レジスタの値を返します。 |
%pc %npc %y |
( -- value ) |
指定されたレジスタの値を返します。 |
%f0 〜 %f31 |
( -- value ) |
指定された浮動小数点レジスタの値を返します。 |
.fregisters |
( -- ) |
%f0 から %f31 までの値を表示します。 |
.locals |
( -- ) |
i、l、o レジスタの値を表示します。 |
.registers |
( -- ) |
プロセッサレジスタの値を表示します。 |
.window |
( window# -- ) |
w .locals と同じ。指定されたウィンドウを表示します。 |
ctrace |
( -- ) |
C サブルーチンを示す復帰スタックを表示します。 |
set-pc |
( new-value -- ) |
%pc に new-value を、%npc に (new-value+4) をそれぞれ設定します。 |
to regname |
( new-value -- ) |
上記のうちの任意のレジスタに格納された値を変更します。new-value to regname の形式で使用してください。 |
w |
( window# -- ) |
現在のウィンドウを、%ix、%lx、または %ox を表示するために設定します。 |
表 6-3 SPARC V9 レジスタコマンド
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
%fprs %asi %pstate %tl-c %pil %tstate %tt %tba %cwp %cansave %canrestore %otherwin %wstate %cleanwin |
( -- value ) |
指定されたレジスタの値を返します。 |
.pstate |
( -- ) |
プロセッサ状態レジスタを特定書式で表示します。 |
.ver |
( -- ) |
バージョンレジスタを特定書式で表示します。 |
.ccr |
( -- ) |
%ccr レジスタを特定書式で表示します。 |
.trap-registers |
( -- ) |
トラップレジスタを表示します。 |
これらのレジスタの値はすべて保存され、to で変更できます。値の確認や変更が終わったら、go コマンドを使用してプログラムの実行を継続できます。保存したレジスタの値 (変更したものを含めて) は、(コピーして) CPU に戻され、保存されたプログラムカウンタによって指定された位置から実行が再開されます。
to を使用して %pc を変更する場合は、%npc も変更する必要があります。(set-pc の方が両レジスタを自動的に変更するので簡単です。)
SPARC V9 システムでは、N が現在のウィンドウの場合、N-1 は呼び出し元のウィンドウを指定し、N-2 は呼び出し元の呼び出し元を指定します。