日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
ソース・コードとは,ソース・ファイル内に現れるプログラミング言語の文を指します。ソース・コードの各行はソース行と呼ばれます。
本章には次の内容が含まれています。
本章で説明する方法は,行 ( 非画面 ) モードだけでなく画面モードにも適用できます。行モードと画面モードの動作内容の相違点は,本章と各コマンドの説明の中で示します。画面モードについての詳細な説明は, 第 7 章 を参照してください。
プログラムがコンパイラによって最適化されている場合は,デバッグ時に実行されるコードがソース・コードに一致しないこともあります。詳しい説明は, 第 14.1 節 を参照してください。
6.1 デバッガがソース・コード情報を取得する方法
コンパイラは,オブジェクト・モジュールを生成するためにソース・ファイルを処理する場合,各ソース行に順に行番号を割り当てます。ほとんどの言語の場合,各コンパイル単位(モジュール)は行1から始まります。 Adaなどでは各ソース・ファイルが行1から始まり,1 つのソース・ファイルが複数のコンパイル単位を表す場合もあります。
行番号は /LIST コンパイル・コマンド修飾子を使用して取得したソース・リスト内に表示されます。また,デバッガがソース・コードを表示する際に,行モードと画面モードのどちらの場合でも常に行番号が表示されます。さらに,いくつかのデバッガ・コマンド ( たとえば,TYPE および SET BREAK ) で行番号を指定することができます。
コンパイル・コマンドと LINK コマンドの両方に /DEBUG コマンドを指定した場合にだけ,デバッグ時にソース行は表示されます。そのような条件下では,コンパイラによって作成されてデバッグ・シンボル・テーブル (DST) に渡されたシンボル情報には,ソース行コリレーション・レコードが含まれます。ある特定のモジュールでは,ソース行コリレーション・レコードには,そのモジュールを支える各ソース・ファイルの完全なファイル指定が入っています。また,ソース行コリレーション・レコードはソース・レコード ( シンボルや型など ) をモジュール内のソース・ファイルと行番号に対応づけます。
6.2 ソース・ファイルの記憶位置の指定
デバッグ・シンボル・テーブル (DST) には,各ソース・ファイルのコンパイル時における完全なファイル指定が入っています。したがって,省略時の設定では,デバッガはソース・ファイルがコンパイル時と同じディレクトリの中に入っているものと想定します。ソース・ファイルをコンパイル後に別のディレクトリに移動した場合,デバッガはそれを見つけることができず,そのファイルからソース・コードを表示しようとすると次のような警告を表示します。
%DEBUG-W-UNAOPNSRC, unable to open source file DISK:[JONES.WORK]PRG.FOR;2 |
このような場合,デバッガに新しいディレクトリを指示するため, SET SOURCE コマンドを使用します。このコマンドは,そのプログラム用のすべてのソース・ファイルに対して適用したり,特定のモジュール用のソース・ファイルだけに適用したりできます。
たとえば,次のコマンド行を入力すると,デバッガは WORK$:[JONES.PROG3]: の中からすべてのソース・ファイルを探します。
DBG> SET SOURCE WORK$:[JONES.PROG3] |
ディレクトリ検索リストを SET SOURCE コマンドで指定できます。たとえば,次のコマンド行を入力すると,デバッガはまず現在の省略時ディレクトリ([]) からファイルを探し,次に WORK$:[JONES.PROG3]: を探します。
DBG> SET SOURCE [], WORK$:[JONES.PROG3] |
ある特定のモジュール用のソース・ファイルだけに SET SOURCE コマンドを適用したい場合は,/MODULE=module-name 修飾子を使用してそのモジュールを指定します。たとえば,次のコマンド行は,モジュール SCREEN_IO 用のソース・ファイルがディレクトリ DISK2:[SMITH.SHARE] に入っていることを指定します。他のモジュール用のソース・ファイルの検索は,このコマンドによって影響を受けません。
DBG> SET SOURCE/MODULE=SCREEN_IO DISK2:[SMITH.SHARE] |
つまり,SET SOURCE/MODULE コマンドは特定のモジュール用のソース・ファイルの記憶位置を指定し,SET SOURCE コマンドは SET SOURCE/MODULE コマンド内で明示的に指定されなかったモジュール用のソース・ファイルの記憶位置を指定します。
SET SOURCE コマンドを入力する場合,/LATEST か /EXACT の修飾子が常に有効であることを確認してください。/LATEST は,最新バージョン ( ディレクトリ内にある最大番号のバージョン ) のソース・ファイルを検索するようデバッガに指示します。/EXACT 修飾子は,最後にコンパイルしたバージョン ( コンパイル時に作成されたデバッガ・シンボル・テーブルに記録されているバージョン ) を検索するようデバッガに指示します。たとえば,SET SOURCE/LATEST コマンドは SORT.FOR;3 を検索し, SET SOURCE/EXACT は SORT.FOR;1 を検索するという具合です。
SHOW SOURCE コマンドは,現在有効なすべてのソース・ディレクトリ検索リストを表示するために使用します。このコマンドは 1 つまたは複数の SET SOURCE/MODULE コマンドで前に設定したとおりの特定のモジュール用の検索リストを表示し,SET SOURCE コマンドで前に設定したとおりの他のすべてのモジュール用の検索リストを表示します。次に例を示します。
DBG> SET SOURCE [PROJA],[PROJB],USER$:[PETER.PROJC] DBG> SET SOURCE/MODULE=COBOLTEST [], DISK$2:[PROJD] DBG> SHOW SOURCE source directory search list for COBOLTEST: [] DISK$2:[PROJD] source directory search list for all other modules: [PROJA] [PROJB] USER$:[PETER.PROJC] DBG> |
SET SOURCE コマンドも SET SOURCE/MODULE コマンドも入力しなかった場合, SHOW SOURCE コマンドは現在有効な検索リストがないことを示します。
前の SET SOURCE コマンドの効力を取り消すには,CANCEL SOURCE コマンドを使用します。前の SET SOURCE/MODULE コマンドの効力を取り消すには, CANCEL SOURCE/MODULE コマンドを同じモジュール名を指定して使用します。
ソース・ディレクトリ検索リストを取り消した場合,デバッガは再び,指定されたモジュールに対応するソース・ファイルがコンパイル時と同じディレクトリに入っているものと想定します。
コンパイル後に別のディレクトリに移されたソース・ファイルをデバッガが検索する方法についての詳しい説明は,SET SOURCE コマンドの説明を参照してください。
6.3 行番号の指定によるソース・コードの表示
TYPE コマンドを使用すると,コンパイラ割り当て行番号を指定することによってソース行を表示できます。その場合,それぞれの行番号はソース・コードの1行を指定します。
たとえば,次のコマンドはデバッグ中のモジュールの行 160 と行 22〜24 を表示します。
DBG> TYPE 160, 22:24 module COBOLTEST 160: START-IT-PARA. module COBOLTEST 22: 02 SC2V2 PIC S99V99 COMP VALUE 22.33. 23: 02 SC2V2N PIC S99V99 COMP VALUE -22.33. 24: 02 CPP2 PIC PP99 COMP VALUE 0.0012. DBG> |
あるモジュールのすべてのソース行を表示するには,1 から始めてそのモジュール内の最大の行番号またはそれ以上の数で終わる行番号の範囲を指定します。
ソース行の表示後は,行番号なしの TYPE コマンドを入力すれば,つまり TYPE コマンドを入力してから Return キーを押せば,そのモジュール内の次の行を表示できます。次に例を示します。
DBG> TYPE 160 module COBOLTEST 160: START-IT-PARA. DBG> TYPE module COBOLTEST 161: MOVE SC1 TO ES0. DBG> |
その後,繰り返し TYPE コマンドを入力することによって,その次の行とそれ以降の行を表示できます。このようにして,一度に 1 行ずつコードを参照することができます。
プログラム内の任意のモジュールのソース行を表示するには,行番号といっしょにモジュール名を指定します。パス名の表記法は標準のものを使用します。つまり,最初にモジュール名を指定し,次にバックスラッシュ (\),最後に行番号または行番号の範囲を指定しますが,それらの間にスペースは入れません。たとえば,次のコマンドは TEST というモジュールの行 16 を表示します。
DBG> TYPE TEST\16 |
TYPE コマンドでモジュール名を指定する場合,そのモジュールは設定されていなければなりません。特定のモジュールが設定されているかどうかを判別するには,SHOW MODULE コマンドを使用します。その後,必要であれば SET MODULE コマンドを使用してください ( 第 5.2 節 を参照 )。
TYPE コマンドでモジュール名を指定しなかった場合,デバッガは省略時の設定では現在実行が一時停止されているモジュール,つまり,PC 範囲に対応したモジュールのソース行を表示します。SET SCOPE コマンドで別の有効範囲を指定してある場合は,デバッガは指定された有効範囲に対応するモジュールのソース行を表示します。
画面モードでは,TYPEコマンドの出力は現在のソースの表示を更新します ( 第 7.2.6 項 を参照 )。
プログラム内のさまざまな記憶位置のソース行を表示したあと,KP5 を押すと,現在実行が一時停止されている行を再表示することができます。
6.4 コード・アドレス式の指定によるソース・コードの表示
EXAMINE/SOURCEコマンドを使用すると,コード・アドレス式に対応したソース行を表示できます。コード・アドレス式は機械語コード命令のアドレスを表すものなので,次のいずれかでなければなりません。
EXAMINE/SOURCE コマンドに変数名を指定することはできません。変数名は,命令ではなくデータに対応しているからです。
EXAMINE/SOURCE コマンドを使用した場合,デバッガはメモリ・アドレスを取得するためにアドレス式を評価し,どのコンパイラ割り当て行番号がそのアドレスに対応するかを判別してから,その行番号によって指定されるソース行を表示します。
たとえば,次のコマンド行はルーチン SWAP のアドレス ( 宣言 ) に対応したソース行を表示します。
DBG> EXAMINE/SOURCE SWAP module MAIN 47: procedure SWAP(X,Y: in out INTEGER) is DBG> |
命令に対応しない行番号を指定した場合,デバッガは診断メッセージを発行します。次に例を示します。
DBG> EXAMINE/SOURCE %LINE 6 %DEBUG-I-LINEINFO, no line 6, previous line is 5, next line is 8 %DEBUG-E-NOSYMBOL, symbol '%LINE 6' is not in the symbol table DBG> |
EXAMINE/SOURCE コマンドをシンボリック・アドレス式 ( 行番号,ラベル,またはルーチン ) といっしょに使用する際,その要素を定義しているモジュールがまだ設定されていないときには,それを設定しなければならない場合もあります。特定のモジュールが設定されているかどうかを判別するには,SHOW MODULE コマンドを使用します。その後,必要であれば SET MODULE コマンドを使用します ( 第 5.2 節 を参照 )。
EXAMINE/SOURCE .%PC コマンドは,現在の PC 値 ( 実行されようとしている行 ) に対応するソース行を表示します。次に例を示します。
DBG> EXAMINE/SOURCE .%PC module COBOLTEST 162: DISPLAY ES0. DBG> |
内容演算子 (.) の使用に注意してください。この演算子は,このピリオドの後ろにある要素の内容を指定します。内容演算子を使用しなかった場合,デバッガは PC 内に現在格納されているアドレスではなく, PC のソース行を見つけようとします。
DBG> EXAMINE/SOURCE %PC %DEBUG-W-NOSRCLIN, no source line for address 7FFF005C DBG> |
次の例は,数値パス名 (1\) を使用して呼び出しスタックの 1 レベル下の PC 値にある実行が一時停止されているルーチンの呼び出しのソース行を表示する例です。
DBG> EXAMINE/SOURCE .1\%PC |
画面モードでは,EXAMINE/SOURCE コマンドの出力は現在のソースの表示を更新します ( 第 7.2.6 項 を参照 )。
デバッガは,次のコンテキストで EXAMINE/SOURCE コマンドを使用して現在の PC 値のソース・コードを表示します。
キーパッド・キー 5 (KP5) が次のような一連のデバッガ・コマンドにバインドされています。
EXAMINE/SOURCE .%SOURCE_SCOPE\%PC; EXAMINE/INST .%INST_SCOPE\%PC |
この一連のコマンドは,現在の有効範囲内で現在実行が一時停止されている位置のソース行と命令を表示します。KP5 を押せばデバッグ・コンテキストを素早く判別することができます。
定義済みソース・ディスプレイ「SRC」は自動的に更新される表示です。これは,デバッガが実行に割り込みをかけ,コマンドを求めるプロンプトを表示するたびに,次の組み込みコマンドを実行します ( 第 7.4.1 項 を参照 )。
EXAMINE/SOURCE .%SOURCE_SCOPE\%PC |
SEARCH コマンドを使用すると,指定した文字列を含んでいるソース行を表示できます。
SEARCH コマンドの構文は次のとおりです。
SEARCH[/qualifier[, ...]] [range] [string] |
範囲のパラメータには,モジュール名,行番号の範囲,またはそれらの組み合わせが指定できます。モジュール名を指定しなかった場合,デバッガは TYPE コマンドの場合と同様に現在の有効範囲を使用してソース行を見つけます ( 第 6.3 節 を参照 )。
省略時の設定では,SEARCH コマンドは指定された範囲内でその文字列が最初に ( 次に ) 現れるソース行を表示します (SEARCH/NEXT)。 SEARCH/ALL コマンドは,指定された範囲内でその文字列が現れるすべてのソース行を表示します。たとえば,次のコマンド行はモジュール SCREEN_IO 内で pro という文字列が最初に現れるソース行を表示します。
DBG> SEARCH SCREEN_IO pro |
以下の例では,1 つの COBOL モジュールに入っているソース行を使用して,現在の有効範囲内で SEARCH コマンドのさまざまな側面を示しています。
次のコマンド行は,文字列 D を含んでいるすべてのソース行を行 40 〜 50 から抽出して表示します。
DBG> SEARCH/ALL 40:50 D module COBOLTEST 40: 02 D2N COMP-2 VALUE -234560000000. 41: 02 D COMP-2 VALUE 222222.33. 42: 02 DN COMP-2 VALUE -222222.333333. 47: 02 DR0 COMP-2 VALUE 0.1. 48: 02 DR5 COMP-2 VALUE 0.000001. 49: 02 DR10 COMP-2 VALUE 0.00000000001. 50: 02 DR15 COMP-2 VALUE 0.0000000000000001. DBG> |
特定のモジュール内で文字列の発生箇所を見つけたあと,パラメータを付けずに SEARCH コマンドを入力すれば,同じモジュール内で同じ文字列が次に現れるソース行を表示することができます。これは,パラメータを付けずに TYPE コマンドを使用して次のソース行を表示するのと似ています。次に例を示します。
DBG> SEARCH 42:50 D module COBOLTEST 42: 02 DN COMP-2 VALUE -222222.333333. DBG> SEARCH module COBOLTEST 47: 02 DR0 COMP-2 VALUE 0.1. DBG> |
省略時の設定では,デバッガは指定されたとおりの文字列を検索し,その文字列の前後のコンテキストは解釈しません。これが SEARCH/STRING の動作内容です。 ある文字列がプログラム内で識別子 ( たとえば,変数名 ) として使用されている箇所を検索し,識別子以外の箇所を除外したい場合は, /IDENTIFIER 修飾子を使用します。 SEARCH/IDENTIFIER コマンドは,その文字列の両端が現在の言語で識別子の一部とはならない文字によって区切られている場合にだけその文字列を表示します。
SEARCH コマンドの省略時の修飾子は /NEXT と /STRING です。別の省略時の修飾子を設定したい場合は SET SEARCH コマンドを使用します。たとえば,次のコマンドの実行後は,SEARCH コマンドは SEARCH/IDENTIFIER のように動作します。
DBG> SET SEARCH IDENTIFIER |
現在 SEARCH コマンドに有効な省略時の修飾子を表示するには, SHOW SEARCH コマンドを使用します。次に例を示します。
DBG> SHOW SEARCH search settings: search for next occurrence, as an identifier DBG> |
目次 | 索引 |
|