次: , 前: Conditions, 上: Breakpoints


5.1.7 ブレイクポイント・コマンド・リスト

ブレイクポイント (あるいは、 ウォッチポイント、 キャッチポイント) に対して、 それによってプログラムが停止したときに実行される一連のコマンドを指定することができます。 例えば、 ある特定の式の値を表示したり、 他のブレイクポイントを有効化したりできると便利なこともあるでしょう。

commands [bnum]
... command-list ...
end
bnumで指定される番号を持つブレイクポイントに対して一連のコマンドを指定します。 コマンド自体は、 次の行以下に記述します。 コマンドの記述を終了するには、 endだけから成る1行を記述します。

ブレイクポイントからすべてのコマンドを削除するには、 commands行に続いて (コマンドを1つも指定せずに) endを記述します。

引数bnumが指定されない場合、 commandsは、 最後に設定されたブレイクポイント、 ウォッチポイント、 キャッチポイントを対象とします (最後に到達したブレイクポイントではありません)。

command-listの記述中は、 <RET>キーが持つ、 最後に実行されたコマンドを繰り返し実行する機能は無効です。

ブレイクポイント・コマンドを使用してプログラムの実行を再開することができます。 continuestep、 または、 実行を再開させるその他の任意のコマンドを使用してください。

コマンド・リストの中で、 実行を再開するコマンドの後に記述されているものは無視されます。 というのは、 プログラムが実行を再開すると (たとえそれがnextコマンドやstepコマンドによるものであっても) 別のブレイクポイントに到達する可能性があり、 そのブレイクポイントがコマンド・リストを持っていると、 どちらのリストを実行するべきかあいまいになるからです。

コマンド・リストの先頭に指定されたコマンドがsilentであると、 ブレイクポイントで停止したときに通常出力されるメッセージは表示されません。 これは、 ある特定のメッセージを出力して実行を継続するようなブレイクポイントを設定するのに望ましいでしょう。 コマンド・リスト中の後続のコマンドがどれもメッセージを出力しない場合、 ブレイクポイントに到達したことをユーザに示す情報は何も表示されないことになります。 silentはブレイクポイント・コマンド・リストの先頭においてのみ意味を持ちます。

echooutputprintfの各コマンドを使用することで、 細かく管理された出力を表示することができます。 これらのコマンドは、 silent指定のブレイクポイントで使うと便利です。 See Commands for controlled output

例えば、 ブレイクポイント・コマンドを使用して、 fooへのエントリにおいて xが正の値を持つときに、 その値を表示するには以下のようにします。

     break foo if x>0
     commands
     silent
     printf "x is %d\n",x
     cont
     end

ブレイクポイント・コマンドの1つの応用として、 あるバグの持つ影響を取り除いて、 他のバグを見つけるためにテストを継続することができます。 誤りのある行の次の行にブレイクポイントを設定し、 その条件の中で誤りの発生を検査し、 ブレイクポイント・コマンドの中で修正の必要な変数に正しい値を割り当てます。 コマンド・リストの最後にはcontinueコマンドを記述して、 プログラムが停止しないようにします。 また、 プログラムの先頭にはsilentコマンドを記述し、 何も出力されないようにします。 以下に例を挙げます。

     break 403
     commands
     silent
     set x = y + 4
     cont
     end