HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
スカラ ( 非集合体 ) 型変数,たとえば整数型や論理型の値を変更するには,次の手順に従ってください ( 図 10-17 を参照)。
図 10-17 モニタされたスカラ型変数の値の変更
値の入力を中止してダイアログ・ボックスを消すには,X ( 取り消し )をクリックします。
集合体型変数 (たとえば配列や構造体) は一度に 1 つの構成要素の値を変更できます。集合体型変数の構成要素の値を変更するには,次の手順に従ってください( 図 10-18 を参照)。
図 10-18 集合体型変数の構成要素の値の変更
この節では,デバッグ時にプログラム変数にアクセスするときの一般的な関連事項について説明します。
コンパイル時にプログラムを最適化すると,デバッグ時に特定の変数にアクセスできなくなります。デバッグ対象のプログラムをコンパイルするときは,できるだけ最適化しないようにしてください ( 第 1.2 節 を参照)。
変数の値をチェックする前に,その変数が宣言され初期化される箇所の先まで必ずそのプログラムを実行します。初期化されていない変数内の値は,不当であると考えられます。
10.6.1 静的変数と非静的 (自動) 変数へのアクセス
ここでは総称して「非静的変数」という用語を使用しますが,言語によっては自動変数と呼ぶ場合もあります。 |
静的変数には,プログラムの実行中は同じメモリ・アドレスが割り当てられます。静的変数にはいつでもアクセスできます。
非静的変数はスタックかレジスタに割り当てられ,その定義元ルーチンかブロックが呼び出しスタック上でアクティブな場合にだけ値を持ちます。したがって,非静的変数にアクセスできるのは,その定義元ルーチンかブロック ( 定義元ルーチンから呼び出されたルーチンを含む ) の有効範囲内でプログラムの実行が一時停止しているときだけです。
通常,非静的変数にアクセスするには,定義元にまずブレークポイントを設定してから,そのブレークポイントまでプログラムを実行します。
ユーザ・プログラムの実行によって非静的変数がアクセスできなくなると,次のような通知がなされます。
10.6.2 呼び出しスタックを基準とする現在の有効範囲の設定
プログラム内のルーチンをデバッグしているときに,現在の有効範囲を呼び出し元ルーチン ( スタックで,現在実行が一時停止しているルーチンより下にあるルーチン ) に設定することができます。これにより,次のことが可能になります。
メイン・ウィンドウの「Call Stack」メニューには,スタックで現在アクティブなプログラム・ルーチン(および,特定の条件下でのイメージとモジュール)の名前が,画面に表示できる最大行数まで一覧表示されます ( 図 10-19 を参照)。メニューの左側の番号は,実行が一時停止しているルーチンをレベル 0 としたときのスタックの各ルーチンのレベルです。
現在の有効範囲をスタックの特定のルーチンに設定するには,「Call Stack」メニュー ( 図 10-19 を参照)。からその名前を選択します。すると,次の処理が行われます。
図 10-19 現在の有効範囲を呼び出し元ルーチンに設定する
有効範囲をある呼び出し元ルーチンに設定すると,その呼び出し元ルーチンに実行制御が戻ったときに実行されるソース行が,白抜きの現在位置ポインタによって示されます。ソース言語やコーディング方法により,呼び出し文を含んでいる行が示されたり,それ以降の行が示されることもあります。
10.6.3 変数やその他のシンボルの検索方法
シンボルがあいまいになるのは,シンボル ( たとえば,変数名 X)を 2 つ以上のルーチンに定義するとき,つまりその他のプログラム・ユニットに定義するときです。
ほとんどの場合,シンボルのあいまいさは自動的に解消されます。まず,現在設定されている言語の有効範囲と可視性の規則が使用されます。また,デバッガではブレークポイントを設定するためなどに任意のモジュール内にシンボルを指定できるので,呼び出しスタック上のルーチン呼び出しの順序によってシンボルのあいまいさが解消されます。
しかし,複数回定義されたシンボルを指定すると,次のような処置がとられることがあります。
これらの問題を解決するためには,目的のシンボル宣言の検索範囲を指定しなければなりません。
DBG> EXAMINE SWAP\X |
レジスタ・ビューには,すべての機械語レジスタの現在の内容が表示されます ( 図 10-20 を参照 )。
レジスタ・ビューを表示するには,メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options」メニューで「Views...」を選択し,「Views」ダイアログ・ボックスが表示されたら,「Registers」をクリックします。
省略時の設定では,レジスタ・ビューには現在実行が一時停止しているルーチンに対応するレジスタ値が自動的に表示されます。プログラムからデバッガに制御が戻ると,プログラムの実行で変更されたすべての値が強調表示されます。
呼び出しスタック内の任意のルーチンに対応するレジスタ値を表示するには,メイン・ウィンドウの「Call Stack」メニューでその名前を選択します ( 第 10.6.2 項 を参照 )。
レジスタに格納されている値を変更するには,次の手順に従ってください。
レジスタ値の表示に使用する基数は,次の方法で変更できます。
命令ビューには,ユーザ・プログラムのデコード済み命令ストリーム,つまり実際に実行されているコード ( 図 10-21 を参照 ) が表示されます。命令ビューが役立つのは,コンパイラによって最適化されたプログラムのデバッグ中は,メイン・ウィンドウの情報が実行中のコードと正確に対応していない場合です ( 第 1.2 節 を参照 )。
命令ビューを表示するには,メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options」メニューで「Views...」を選択し,「Views」ダイアログ・ボックスが表示されたら,「Instructions」をクリックします。
省略時の設定では,命令ビューには現在実行が一時停止しているルーチンのデコード済み命令ストリームが自動的に表示されます。命令の左にある現在位置ポインタは,次の実行命令を示します。
省略時の設定では,命令に対応するソース・コードの行番号が命令の左に表示されます。行番号を表示するか表示しないか指定するには,命令ビューの「File」メニューで「Display Line Numbers」を選択します。
省略時の設定では,命令の左にメモリ・アドレスが表示されます。アドレスを表示するか表示しないか指定するには,命令ビューの「File」メニューで「Show Instruction Addresses」を選択します。
命令ビューでの操作が終了したら,「Call Stack」メニューをクリックして,実行の停止箇所を再表示できます。
呼び出しスタック内のルーチンの命令ストリームを表示するには,メイン・ウィンドウの「Call Stack」メニューでそのルーチンの名前を選択します ( 第 10.6.2 項 を参照 )。
図 10-21 命令ビュー
タスキング・プログラム (マルチ・スレッド・プログラムとも呼ばれます) は 1 つのプロセス内に複数の実行スレッドを持っており,次のプログラムを含んでいます。
デバッガで使用する タスクやスレッド という用語はこのような制御の流れを示すものであり,言語や実現方法とは関係ありません。デバッガのタスキング・サポートは,このようなプログラムすべてに適用されます。
デバッガを使用すれば,タスクの情報を表示したり,タスクの実行,優先順位,状態の遷移などを制御するタスク特性を変更したりできます。
次の各節ではデバッガの HP DECwindows Motif for OpenVMS ユーザ・インタフェースのタスキング機能を要約します。デバッガのタスキング・サポートについての詳しい説明は, 第 16 章 を参照してください。
10.9.1 タスク (スレッド) 情報の表示
プログラムのタスク (スレッド) 情報を表示するには,メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options」メニューで「Views...」を選択し,「Views」ダイアログ・ボックスが表示されたら,「Threads」をクリックします。
このスレッド・ビューには,ユーザ・プログラム内に現在存在している ( 終了していない ) すべてのタスクの情報が表示されます。プログラムからデバッガに制御が戻ると,タスク情報が更新されます ( 図 10-22 を参照 )。
図 10-22 スレッド・ビュー
次の各情報が表示されます。
デバッグ中にタスク (スレッド) の特性やタスキング環境を変更するには,「Threads」メニューで次のいずれかの項目を選択します。
| 「Threads」メニューの項目 | 機能 |
|---|---|
| Abort | 選択されたタスク (スレッド) を次に終了可能なときに終了するように要求する。実際にどのように実行されるかは,現在のイベント機能により異なる(言語固有)。 Adaのタスクの場合,強制終了文の実行と同じである。 |
| Activate | 選択されたタスク (スレッド) をアクティブ・タスクにする。 |
| Hold | 選択されたタスク (スレッド) を保留にする。 |
| Nohold | 選択されたタスク (スレッド) の保留を解除する。 |
| Make Visible | 選択されたタスク (スレッド) を可視タスクにする。 |
| All | サブメニューを使用してすべてのタスク (スレッド) を強制終了したり,すべてのタスク (スレッド) の保留を解除する。 |
| 前へ | 次へ | 目次 | 索引 |