HP OpenVMS デバッガ説明書
7.4.1 定義済みソース・ディスプレイ(SRC) | |
| 注意
デバッグ・セッション中にソース・コードをディスプレイに使用する方法についての詳しい説明は, 第 6 章 を参照してください。
|
定義済みディスプレイの SRC ( 図 7-1 を参照 ) は,自動的に更新されるソース・ディスプレイです。
SRC は,ソース・コードを次の 2 つの基本的な方法で表示するために使用できます。
- 省略時の設定では,SRCは現在実行が一時停止しているモジュールのソース・コードを自動的に表示する。これによって,ユーザは現在のデバッグ・コンテキストを素早く判別できる。
- 省略時の設定では SRC は source 属性を持っているので, 第 7.4.1.1 項 で説明するとおり,SRCを使用してプログラムの任意の部分のソース・コードを表示できる。
ソース・コードが表示されているモジュールの名前はディスプレイ名 SRC の右側に示されます。ソース・コードの左側に表示される番号は,コンパイラ生成リスト・ファイルに現れるコンパイラ生成行番号です。
デバッガの制御下でプログラムを実行すると,実行が一時停止するたびにSRCが自動的に更新されます。左端の欄の矢印は,次に実行されるソース行を指しています。正確に言えば,実行はそのソース行に対応する最初の命令の位置で一時停止しています。したがって,矢印が指している行は現在のプログラム・カウンタ(PC)の値に対応します。 PCは,次に実行する命令のメモリ・アドレスが入っているレジスタです。
実行が一時停止しているルーチンのソース・コードを検索できない場合,たとえば,そのルーチンが実行時ライブラリ・ルーチンである場合などは,デバッガは呼び出しスタック上で次に下にあるルーチン(ソース・コードが取得できるもの)のソース・コードを表示しようとします。そのようなルーチンのソース・コードを表示する場合,デバッガは次のメッセージを発行します。
%DEBUG-I-SOURCESCOPE, Source lines not available for .0\%PC.
Displaying source in a caller of the current routine.
|
図 7-2 はこの機能を示しています。ソース・ディスプレイには,ルーチンTYPEの呼び出しが現在アクティブであることが示されています。TYPEは Fortran 実行時ライブラリ・プロシージャの1つに対応します。このルーチンのソース・コードは取得できないので,デバッガは呼び出し元ルーチンのソース・コードを表示します。出力ディスプレイに示されているSHOW CALLSコマンドの出力は,実行が一時停止しているルーチンとそのルーチンに通じる呼び出しシーケンスを示しています。
このような場合,ソース・ウィンドウの矢印はそのルーチン呼び出し後に実行が戻ってくる行を示します。この行は,ソース言語とコーディング・スタイルに応じて,その呼び出し文を含んでいる行であったり,その次の行であったりします。
図 7-2 ソース・コードが取得できない場合の画面モード・ソースの表示
プログラムがコンパイル時に最適化された場合は, SRCに表示されるソース・コードが実際に実行されているコードを表さないこともあります。そのような場合には,定義済み機械語命令ディスプレイのINSTが役立ちます。このディスプレイは実行されている命令を正確に示します。 ( 第 7.4.4 項 を参照。)
ディスプレイSRCを自動的に更新する組み込みコマンドは EXAMINE/SOURCE .%SOURCE_SCOPE\%PC です。 EXAMINE/SOURCEコマンドについての詳しい説明は
第 6.4 節 を参照してください。組み込みデバッガ・シンボル%SOURCE_SCOPEは1つの有効範囲を表し,次の特性を持っています。
- 省略時の設定では,%SOURCE_SCOPEは有効範囲0を表します。これは実行が現在一時停止しているルーチンの有効範囲です。
- SET SCOPE/CURRENTコマンドを使用して有効範囲検索リストを呼び出しスタックの相対位置に再設定した場合 (
第 7.4.1.2 項 を参照),%SOURCE_SCOPEは指定された現在の有効範囲(検索リストの始めのルーチンの有効範囲)を表します。
- 現在の有効範囲にあるルーチンのソース・コードが取得できない場合, %SOURCE_SCOPEは有効範囲nを表します。ここで,nは呼び出しスタックの下にあってソース・コードが取得できる最初のレベルです。
7.4.1.1 任意のプログラム記憶位置でのソース・コードの表示
プログラム全体を通じて,ソース・コードがディスプレイに使用できる場合はソース・コードを表示するためにディスプレイSRCを使用できます。
ディスプレイSRCの内容の操作後,KP5を押せば現在実行が一時停止している記憶位置を再表示できます(SRCの省略時の動作)。
7.4.1.2 呼び出しスタック上にあるルーチンのソース・コードの表示
SET SCOPE/CURRENTコマンドを使用すると,現在呼び出しスタック上にあるルーチンのソース・コードを表示できます。たとえば次のコマンドは,現在実行が一時停止しているルーチンの呼び出し元のソース・コードが表示されるようにディスプレイSRCを更新します。
ソース・コードを表示するための省略時の有効範囲を再設定するには, CANCEL SCOPEコマンドを入力します。このコマンドは,実行が一時停止している呼び出しスタック最上部のルーチンのソース・コードがディスプレイSRCに表示されるようにします。
7.4.2 定義済み出力ディスプレイ(OUT) | |
図 7-1 および 図 7-2 は,定義済みディスプレイOUTの代表的なデバッガ出力を示しています。
ディスプレイOUTは汎用の出力ディスプレイです。省略時の設定ではOUTはoutput属性を持っているので,ソース・ディスプレイSRCや機械語命令ディスプレイINSTには出力されないデバッガ出力を表示します。たとえば,ディスプレイINSTを更新するはずの出力は,ディスプレイINSTが表示されていないかinstruction属性を持っていなければディスプレイOUTの中に表示されます。
省略時の設定では,OUTはデバッガの診断メッセージを表示せず,それらは PROMPTディスプレイに表示されます。ユーザはOUTに属性を割り当てることによって,通常の出力だけでなくデバッガの入力と診断もOUTに取り込まれるようにすることができます ( 第 7.3 節 を参照)。
省略時の設定では,定義済みディスプレイ OUT に割り当てられるメモリ・バッファは 100 行です。
7.4.3 定義済みプロンプト・ディスプレイ(PROMPT) | |
定義済みディスプレイ PROMPT は,デバッガが入力を求めるプロンプトを出すディスプレイです。 図 7-1 および 図 7-2 では,PROMPT がその省略時の位置,つまり画面の下部の 6 分の 1 に示されています。
省略時の設定では,PROMPT はプロンプト属性を持ちます。さらに, PROMPT には (省略時の設定により) プログラム属性とエラー属性があり,プログラムからの出力と診断メッセージはそのディスプレイに出力されます。
PROMPT には,次に示すように他のディスプレイと異なる特性と制限事項があります。これは PROMPT ディスプレイを操作する際に混乱が起きないようにするためです。
- PROMPT ディスプレイ・ウィンドウはつねにすべて見える状態になっています。PROMPT を表示しなかったり (DISPLAY/HIDEコマンド), PROMPT をペーストボードから除去したり (DISPLAY/REMOVEコマンド), PROMPT を削除したり (CANCEL DISPLAYコマンド ) することはできません。
- PROMPT にスクロール属性を割り当てると,MOVE コマンドと EXPAND コマンドの出力がこのディスプレイに渡されます。しかし,PROMPT ディスプレイをスクロールすることはできません。
- PROMPT ディスプレイ・ウィンドウは常に最初のカラムから画面の幅いっぱいを占めます。
- PROMPT は,画面の任意の場所へ移動したり,全画面を覆う高さまで拡大したり,2 行にまで縮小したりできます。
PROMPT によって隠されるようなディスプレイの移動または拡大をユーザが行おうとした場合,デバッガは警報を出します。
7.4.4 定義済み機械語命令ディスプレイ(INST) | |
ディスプレイ INST は自動的に更新される機械語命令ディスプレイです。そのディスプレイはユーザ・プログラムのデコード済み命令ストリームを表示します。これは実行されている正確なコードであり,コンパイラの最適化の効果も含まれています。
VAXの例を 図 7-3 に示します。
このディスプレイは最適化されたコードのデバッグに便利です。最適化されたコードの場合,実行されているコードがソース・ディスプレイに表示されているコードと一致しないこともあります。最適化の効果についての詳しい説明は
第 14.1 節 を参照してください。
INST は,次の 2 つの基本的な方法で使用できます。
- 省略時の設定では,INST は現在実行が一時停止しているルーチンのデコード済み命令を表示する。その結果,現在のデバッグ・コンテキストを素早く判別できる。
- INST が命令属性を持っている場合,
第 7.4.4.2 項 で説明するとおり,プログラムの任意の部分のデコード済み命令を表示するためにINSTを使用することができる。
命令が表示されているルーチンの名前は,ディスプレイ名「INST」の右側に表示されます。命令の左側に表示される番号はコンパイラ生成ソース行番号です。
デバッガの制御下でプログラムを実行している場合は,実行が一時停止するたびに自動的に INST が更新されます。左端の欄の矢印は実行が一時停止している位置の命令を指します。これは次に実行される予定の命令であり,この命令のアドレスが現在の PC 値です。
図 7-3 画面モード機械語命令ディスプレイ(VAX システムの例)
ディスプレイ INST を自動的に更新する組み込みコマンドは
EXAMINE/INSTRUCTION .%INST_SCOPE\%PC です。 EXAMINE/INSTRUCTION コマンドについての詳しい説明は, 第 4.3.1 項 を参照してください。組み込みデバッガ・シンボル %INST_SCOPE は有効範囲を表し,次の特性を持っています。
- 省略時の設定では,%INST_SCOPE は有効範囲0を表す。これは実行が現在一時停止しているルーチンの有効範囲である。
- SET SCOPE/CURRENTコマンドを使用して有効範囲検索リストを呼び出しスタックの相対位置に再設定した場合 (
第 7.4.4.3 項 を参照 ),%INST_SCOPE は指定された現在の有効範囲 ( 検索リストの始めのルーチンの有効範囲 ) を表す。
省略時の設定では,ディスプレイ INST はディスプレイ・ペーストボードから除去されたものとしてマークされ (
第 7.5.2 項 を参照 ),可視ではありません。ディスプレイ INST を表示するには,次のいずれかの方法を使用します。
- ディスプレイ SRC とディスプレイINSTを隣り合わせに配置するには KP7 を押す。この結果,ソース・コードとデコード済み命令ストリームが比較できる。
- ディスプレイ INST とディスプレイ REG を隣り合わせに配置するには PF1 KP7 を押す。
- INST を省略時の位置または最も新しく定義された位置に配置するには DISPLAY INST コマンドを入力する (
第 7.5.2 項 を参照)。
7.4.4.2 任意のプログラム記憶位置にある命令の表示
INST は,プログラム全体を通してデコード済み命令を表示するために使用することができます。
ディスプレイ INST の内容の操作後,KP5 を押せば現在実行が一時停止している記憶位置を再表示 (INST の省略時の動作 ) できます。
7.4.4.3 呼び出しスタック上にあるルーチンの命令の表示
SET SCOPE/CURRENT コマンドを使用すると,現在呼び出しスタック上にあるルーチンの命令を表示できます。たとえば,次のコマンドはディスプレイ INST を更新し,現在実行が一時停止しているルーチンの呼び出し元の命令をディスプレイINSTに表示します。
命令を表示するための省略時の有効範囲を再設定するには, CANCEL SCOPE コマンドを入力します。このコマンドを入力すると,実行が一時停止されている呼び出しスタック最上部にあるルーチンの命令が表示されます。
7.4.4.4 呼び出しスタック上にあるルーチンのレジスタ値の表示
SET SCOPE/CURRENT コマンドを使用すると,現在呼び出しスタック上にあるルーチンに対応したレジスタ値を表示できます。たとえば,次のコマンドはディスプレイ REG を更新し,現在実行が一時停止しているルーチンの呼び出し元のレジスタ値をディスプレイ REG に表示します。
レジスタ値を表示するための省略時の有効範囲を再設定するには, CANCEL SCOPE コマンドを入力します。このコマンドを入力すると,実行が一時停止している呼び出しスタック最上部のルーチンのレジスタ値がディスプレイ REG に表示されます。
この節では,次の機能の実行方法を説明します。
- SELECT コマンドおよび SCROLL コマンドを使用したディスプレイのスクロール
- DISPLAY コマンドを使用したディスプレイの表示,非表示,除去, CANCEL DISPLAY コマンドを使用したディスプレイの永久削除,および SHOW DISP LAYコマンドを使用した既存のディスプレイの識別とそれらのディスプレイ・リスト内の順序の識別
- MOVE コマンドを使用したディスプレイの画面内移動
- EXPAND コマンドを使用したディスプレイの拡大または縮小
第 7.7 節 および 第 7.2 節 でも既存のディスプレイを DISPLAY コマンドによって変更するための方法 ( ディスプレイ・ウィンドウおよび表示される情報の種類を変更する方法 ) を詳しく説明しています。
|