指定した変数の値が変更された場合にプログラム実行を停止するには、次のように入力します。
(dbx) stop change variable |
stop change コマンドを使用する場合、次の点に注意してください。
dbx は、指定の変数の値に変更が発生した行の次の行でプログラムを停止します。
variable が関数に対しローカルである場合、関数が初めて呼び出されて variable の記憶領域が割り当てられた時点で、変数に変更が生じたものとみなされます。パラメータについても同じことが言えます。
このコマンドは、マルチスレッドのアプリケーションに対し機能しません。
change イベントを指定する詳細については、「change variable」および 「stop コマンド」を参照してください。
dbx は、自動シングルステップを実行し、各ステップで値をチェックすることにより、stop change を実装します。ライブラリが -g オプションでコンパイルされていない場合、ステップ実行においてライブラリの呼び出しが省略されます。そのため、制御が次のように流れていく場合、 dbx はネストされた user_routine2 をトレースしません。トレースにおいて、ライブラリの呼び出しとネストされた user_routine2 の呼び出しが省略されるからです。
user_routine calls library_routine, which calls user_routine2, which changes variable |
variable の値の変更は、user_routin2 が実行されている最中ではなく、ライブラリが呼び出しから戻ったあとに発生したように見えます。
dbx は、ブロック局所変数 ({} でネストされている変数) の変更に対しブレークポイントを設定できません。「ネスト」されたブロック局所変数でブレークポイントまたはトレースを設定しようとすると、その操作を実行できない旨を伝えるエラーメッセージが表示されます。
change イベントよりも access イベントを使用した方が、迅速にデータ変更をチェックできます。access イベントは、自動的にプログラムをシングルステップする代わりに、はるかに迅速なページ保護スキーマを使用するからです。