Next: , Previous: Assignment, Up: Altering


11.2 異なるアドレスにおける処理継続

通常、 ユーザ・プログラムを継続実行するには、 continueコマンドを使用して、 停止した箇所から継続実行させます。 以下のコマンドを使用することで、 ユーザが選択したアドレスにおいて実行を継続させることができます。

jump linespec
linespecで指定される行において、 実行を再開します。 その行にブレイクポイントが設定されている場合には、 実行は再びすぐに停止します。 linespecの形式については、 See Printing source lines。 一般的な慣例として、 jumpコマンドは、 tbreakコマンドと組み合わせて使用されます。 See Setting breakpoints

jumpコマンドは、 カレントなスタック・フレーム、 スタック・ポインタ、 メモリ内の任意の箇所の内容、 プログラム・カウンタを除くレジスタの内容を変更しません。 linespecで指定される行が、 現在実行されている関数とは異なる関数の中にある場合、 それら2つの関数が異なるパターンの引数やローカル変数を期待していると、 奇妙な結果が発生するかもしれません。 このため、 指定された行が、 現在実行されている関数の中にない場合、 jumpコマンドは実行の確認を求めてきます。 しかし、 ユーザがプログラムのマシン言語によるコードを熟知していたとしても、 奇妙な結果の発生することが予想されます。

jump *address
addressで指定されるアドレスにある命令から、 実行を再開します。

レジスタ$pcに新しい値を設定することで、 jumpコマンドとほとんど同等の効果を実現することができます。 両者の違いは、 レジスタ$pcに値を設定しただけでは、 ユーザ・プログラムの実行は再開されないという点にあります。 ユーザが実行を継続するときに、 プログラムが実行を再開するアドレスが変更されるだけです。 例えば、

     set $pc = 0x485

を実行すると、 次にcontinueコマンドやステップ実行を行うコマンドが実行されるとき、 ユーザ・プログラムが停止したアドレスにある命令ではなく、 アドレス0x485にある命令から実行されることになります。 See Continuing and stepping

jumpコマンドが最も一般的に使用されるのは、 既に実行されたプログラム部分を、 さらに多くのブレイクポイントを設定した状態で再実行する場合でしょう。 これにより、 実行される処理の内容をさらに詳しく調べることができます。