Go to the first, previous, next, last section, table of contents.

異なったアドレスへの処理の継続

プログラムの実行を継続する場合、普通、`cont' コマンドによって停止 した位置から継続します。あなたは、このアドレスを使う代わりに、次に 説明するコマンドを使って、自分で選んだアドレスから処理を継続させる ことができます:

jump linenum
linenum から実行を再開します。そこにブレークポイントが設定されて いた場合、実行はただちに停止されます。 `jump' コマンドはカレントのスタックフレーム、スタックポインタ、 又はプログラムカウンタ以外の他のレジスタやメモリ位置を変更しません。 もし、linenum の行がカレントで実行されてているものとは異なった 関数の場合、2つの関数が異なったパターンの引数やローカル変数を要求 したならば、その結果は思いがけないものとなります。 そのため、指定された行がカレントで実行中の関数ではない場合、`jump' コマンドは確認を求めてきます。しかしながら、プログラムのコードと してのマシン語を注意深く勉強したという土台があれば、思いがけない 結果でさえ予想することができます。
jump *address
address 上のインストラクションから実行を再開します。

あなたは、レジスタ $pc に新しい値を設定することで、 jump コマンドと同様な効果を得ることができます。この方法で 唯一異なる点は、動作中のプログラムをスタートさせないということです; これは、処理を継続する時のアドレスを変更させるだけです。例えば、

set $pc = 0x485

は、次に `cont' コマンドを実行したり、ステップ実行コマンドを 処理したりする時のアドレスを、プログラムが停止したアドレスの かわりに、0x485 にします。See section ステップ実行

`jump' コマンドを最もよく利用するケースとしては、next に よって関数コールにまたがって停止し、リターン値が正しくないことが わかったといったような場合です。もし、全ての関連するデータが関数 コール前に正しいならば、恐らく、エラーはリターンしてきた直前の関数に あるはずです。

一般的に、あなたの次のステップは、プログラムを再実行し、この関数 コールを行い、間違った部分をステップごとに実行して見つけることに なるでしょう。しかし、これは時間の無駄です。もし、その関数が重大な 副作用を持っていないのなら、あなたは関数コールの直前から実行し直し、 その中をステップごとに調べていくことで、同一の情報を得られます。 このことを実現するには、まず、ブレークポイントをその関数に設定し; そこで、`jump' コマンドを使って、その関数コールを含む行へと 処理を継続させることになります。


Go to the first, previous, next, last section, table of contents.