SET WATCH コマンドの修飾子 /OVER,/INTO,および /[NO]STATIC には,非静的変数をウォッチするときのオプションがあります。
非静的変数にウォッチポイントを設定する場合,ルーチン呼び出し時に,次の 2 つのうちいずれかを実行するようデバッガに指示できます。
- 呼び出されたルーチンを1ステップとして最大速度で実行し,呼び出し元に復帰後,命令のトレースを再開する。これは,省略時の設定である (SET WATCH/OVER)。
- 呼び出されたルーチン内で命令をトレースする。すなわち,ルーチン内で命令が実行されるたびに,変数をモニタする(SET WATCH/INTO)。
SET WATCH/OVER コマンドを使用したほうが,性能が良くなります。ただし,呼び出されたルーチンがウォッチされている変数を変更した場合は,実行が呼び出し元に戻ってから,ウォッチポイントが検出されます。 SET WATCH/INTO コマンドは,プログラムの実行速度を低下させますが,呼び出されたルーチン内でより正確にウォッチポイントをモニタできます。
デバッガは,変数のアドレス (P0 空間,P1 空間,またはレジスタ ) を見ることによって,その変数が静的変数であるか非静的変数であるかを決定します。ユーザは,SET WATCH コマンドの入力時に /[NO]STATIC 修飾子を指定することで,この決定を上書きすることができます。たとえば,P1 空間内に非スタック領域を割り当てた場合は,SET WATCH/STATIC コマンドを使用して,その変数は P1 空間内に存在しても静的変数であることを指定します。反対に,自分自身の呼び出しスタックを P0 空間内に割り当てた場合には,SET WATCH/NOSTATIC コマンドを使用して,その変数は P0 空間内に存在しても非静的変数であることを指定します。
3.4.3.4 インストールされた書き込み可能な共用可能イメージへのウォッチポイントの設定
インストールされた書き込み可能な共用可能イメージにウォッチポイントを設定するには,SET WATCH/NOSTATIC コマンドを使用します ( 第 3.4.3.3 項 を参照)。
非静的なウォッチポイントを設定しなければならない理由は,次のとおりです。このような共用可能イメージ内で宣言された変数は通常,静的変数です。省略時の設定では,デバッガは,その変数を含むページを書き込み禁止にすることによって静的変数をウォッチします。しかし,インストールされた書き込み可能な共用可能イメージ内のページを,書き込み禁止にすることはできません。したがって,デバッガは,非静的変数の場合と同じように,変数値の変更を発見するために性能の良くない手法を使用しなければなりません。すなわち,個々の命令が実行されるたびに,ウォッチされている記憶位置の値を調べる方法です ( 第 3.4.3.1 項 を参照)。
他のプロセスが,ウォッチされている記憶位置の値を変更したとしても,デバッガは,ユーザのプログラムがその値を変更したと報告する可能性があります。