10.6.2 呼び出しスタックを基準とする現在の有効範囲の設定 |
|
プログラム内のルーチンをデバッグしているときに,現在の有効範囲を呼び出し元ルーチン ( スタックで,現在実行が一時停止しているルーチンより下にあるルーチン ) に設定することができます。これにより,次のことが可能になります。
- 現在のルーチン呼び出しの開始位置を明らかにする。
- 呼び出し元ルーチンで宣言されている変数の値を明らかにする。
- 再帰呼び出しされるルーチンの特定の起動時に変数の値を明らかにする。
- ルーチン呼び出しの場合の変数の値を変更する。
メイン・ウィンドウの「Call Stack」メニューには,スタックで現在アクティブなプログラム・ルーチン(および,特定の条件下でのイメージとモジュール)の名前が,画面に表示できる最大行数まで一覧表示されます (
図 10-19 を参照)。メニューの左側の番号は,実行が一時停止しているルーチンをレベル 0 としたときのスタックの各ルーチンのレベルです。
現在の有効範囲をスタックの特定のルーチンに設定するには,「Call Stack」メニュー (
図 10-19 を参照)。からその名前を選択します。すると,次の処理が行われます。
- 「Call Stack」メニューには,現在の有効範囲であるルーチンの名前と相対レベルが表示される。
- メイン・ウィンドウには,そのルーチンのソース・コードが表示される。
-
命令ビューには,そのルーチンのデコード済み命令が表示される。
-
レジスタ・ビューには,そのルーチン呼び出しに対応したレジスタ値が表示される。
- 有効範囲を呼び出し元ルーチン (0 以外の呼び出しスタック・レベル ) に設定すると,現在位置ポインタは 図 10-19 のように白抜きになる。
- シンボル検索の有効範囲は選択されたルーチンに設定されるので,その有効範囲内で変数を検査することなどができる。
図 10-19 現在の有効範囲を呼び出し元ルーチンに設定する
有効範囲をある呼び出し元ルーチンに設定すると,その呼び出し元ルーチンに実行制御が戻ったときに実行されるソース行が,白抜きの現在位置ポインタによって示されます。ソース言語やコーディング方法により,呼び出し文を含んでいる行が示されたり,それ以降の行が示されることもあります。
10.6.3 変数やその他のシンボルの検索方法 |
|
シンボルがあいまいになるのは,シンボル ( たとえば,変数名 X)を 2 つ以上のルーチンに定義するとき,つまりその他のプログラム・ユニットに定義するときです。
ほとんどの場合,シンボルのあいまいさは自動的に解消されます。まず,現在設定されている言語の有効範囲と可視性の規則が使用されます。また,デバッガではブレークポイントを設定するためなどに任意のモジュール内にシンボルを指定できるので,呼び出しスタック上のルーチン呼び出しの順序によってシンボルのあいまいさが解消されます。
しかし,複数回定義されたシンボルを指定すると,次のような処置がとられることがあります。
- ユーザの意図するシンボルの特定の宣言をデバッガが決められず, "symbol not unique"メッセージが発行される。
- 現在の有効範囲内で可視のシンボル宣言があれば,ユーザの意図するものでなくてもそれが参照される。
これらの問題を解決するためには,目的のシンボル宣言の検索範囲を指定しなければなりません。
- 呼び出しスタック内で現在アクティブな複数のルーチン内にシンボルのさまざまな宣言がある場合は,メイン・ウィンドウの「Call Stack」メニューを使用して現在の有効範囲を再設定する ( 第 10.6.2 項 を参照 )。
- それ以外の場合は,シンボルの前にパス名を指定して,適切なコマンド (EXAMINEやMONITOR など ) をコマンド・プロンプトで入力する。たとえば,変数 X を COUNTER と SWAP という2つのモジュールに定義している場合,次のコマンドを使用すればパス名 SWAP\X によって SWAP モジュール内の X の宣言を指定できる。