ウォッチポイントは、変数または式の値が変化したときにイベントを発生させる dbx の一般的な機能です。
アドレスの内容に書き込みが行われたときにプログラムの実行を停止するには、次のように入力します。
(dbx) stop modify & variable
stop modify を使用するときの注意事項
変数 variable にそれまで設定されていた値と同じ値が書き込まれた場合でもイベントは発生します。
dbx が命令をエミュレートすることによって、メモリーに新しい内容が設定された場合でも、変数への書き込みを行なった命令が実行される前にイベントが発生します。
関数に局所的な自動変数など、スタック変数のアドレスを使用することはできません。
指定した変数の値が変化したときにプログラムの実行を停止するには、次のように入力します。
(dbx) stop change variable
stop change を使用するときの注意事項
dbx は、指定された変数の値に変更があった行の後ろの行でプログラムを停止します。
変数が関数の局所変数の場合、その関数に最初に制御が移り、変数のための記憶領域が割り当てられた時点で変更があったと見なします。パラメータについても、同じことが言えます。
dbx は、自動的なステップ実行を行い、各ステップで値を検査することによって stop change を実現しています。ステップ実行では、ライブラリ呼び出しは飛ばされます。したがって、制御の流れが次のようになっているとき、
user_routine calls library_routine, which calls user_routine2, which changes variable
dbx は入れ子になった user_routine2 をトレースしません。トレース時にライブラリ呼び出しと user_routine2 の呼び出しがスキップされるため、入れ子になった呼び出しをトレースしません。この結果、変数の値は user_routine2 ルーチンの中ではなく、ライブラリ呼び出しから戻った後に変更されたように示されます。
ブロック局所変数、すなわち、{} 内で定義された変数の変化に対するブレークポイントは設定できません。このような変数にブレークポイント (またはトレース) を設定しようとすると、その操作ができないことを示すエラーメッセージが出されます。
条件文が真になったときにプログラムの実行を停止するには、次のように入力します。
(dbx) stop cond condition