ここでは以下のトピックで、Debug Tool を使用して PL/I プログラムを デバッグする方法を説明します。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
下記の表に、PL/I コマンドの Debug Tool 解釈サブセット のリストを示します。このサブセットは、Debug Tool が認識する一群のコマンドであり、対応する PL/I コマンドの構文と処理に非常に似ているか、重複しています。このコマンドのサブセットは、現行のプログラム言語が PL/I の場合にのみ有効です。
| コマンド | 説明 |
|---|---|
| Assignment | スカラーおよびベクトルの割り当て |
| BEGIN | 複合コマンド・グループ |
| CALL | Debug Tool 手続き呼び出し |
| DECLARE または DCL | セッション変数の宣言 |
| DO | 反復ループおよび複合コマンド・グループ |
| IF | 条件付きの実行 |
| ON | 例外ハンドラーの定義 |
| SELECT | 条件付きの実行 |
PL/I ステートメントは、Debug Tool コマンド として入力されます。Debug Tool は、それぞれの言語に類似した方法でコマンドを出すことができるように しています。
次のタイプの Debug Tool コマンドが、PL/I ステートメントの構文を サポートしています。
これらのコマンドが、複数の Debug Tool コマンドを「1 つ」の コマンド・グループにまとめる手段となります。
これらのコマンドは、式を評価し、その値にもとづいて Debug Tool コマンドの 実行の流れを制御します。
これらのコマンドが、セッション変数を定義する手段となります。
反復ループあるいは条件付きループを Debug Tool コマンドとして プログラムできます。
コマンドのグループの実行の流れを無条件で変更する手段となります。
下の表に、現行プログラム言語が PL/I のときに 使用する Debug Tool コマンドの、このリリースで追加または変更があった ものを示します。
| コマンド | 説明または変更点 |
|---|---|
| ANALYZE | PL/I 形式で計算した式、精度、最終結果と中間結果の大きさを表示します。Debug Tool は、Enterprise PL/I プログラムではこのコマンドをサポートしません。 |
| ON | AT OCCURRENCE コマンドと同じ機能ですが、PL/I 条件がオペランドに来る点が違います。 |
| BEGIN | 論理ブロックの BEGIN/END。 |
| DECLARE | セッション変数として、 COMPLEX (CPLX)、 POINTER、 BIT、 BASED、 ALIGNED、 UNALIGNED、などが使用可能になりました。配列は上限および下限を宣言することができます。 変数には、精度と大きさの指定が可能になりました。Enterprise PL/I プログラムのデバッグ時には、配列および構造を宣言できません。 |
| DO | 3 つの形の DO が追加されました。そのうちの 1 つは、C の do の拡張版です。
|
| IF | IF / ELSE には ENDIF は不要です。 |
| SELECT | SELECT / WHEN / OTHERWISE / END の プログラミング構造が追加されました。 |
下の表は、現行プログラム言語が PL/I のときの、Debug Tool の 変数 %PATHCODE に使用可能な値を示しています。
| 0 | アテンション割り込みが発生しました。 |
| 1 | ブロックに入っています。 |
| 2 | ブロックから出ようとしています。 |
| 3 | 制御がラベル定数に達しました。 |
| 4 | CALL または関数参照の結果、制御が他の場所に移されています。 |
| 5 | 制御が CALL 呼び出しまたは関数参照から戻っています。レジスター 15 は、戻りコードが入っていても、保管されていません。 |
| 6 | 複雑な DO ステートメント内のロジックの実行を開始します。 |
| 7 | IF...THEN に続くロジックが実行されようとしています。 |
| 8 | ELSE に続くロジックが実行されようとしています。 |
| 9 | select-group 内の WHEN に続くロジックが実行されようとしています。 |
| 10 | select-group 内の OTHERWISE に続くロジックが実行されようとしています。 |
すべての PL/I 条件を Debug Tool は認識します。PL/I 条件は、AT OCCURRENCE コマンドおよび ON コマンドと一緒に使用します。
OCCURRENCE ブレークポイントが起動されると、Debug Tool の %CONDITION 変数には次の値が入ります。
| 起動された条件 | %CONDITION の値 |
|---|---|
| AREA | AREA |
| ATTENTION | CEE35J |
| COND ( CC#1 ) | CONDITION |
| CONVERSION | CONVERSION |
| ENDFILE ( MF ) | ENDFILE |
| ENDPAGE ( MF ) | ENDPAGE |
| ERROR | ERROR |
| FINISH | CEE066 |
| FOFL | CEE348 |
| KEY ( MF ) | KEY |
| NAME ( MF ) | NAME |
| OVERFLOW | CEE34C |
| PENDING ( MF ) | PENDING |
| RECORD ( MF ) | RECORD |
| SIZE | SIZE |
| STRG | STRINGRANGE |
| STRINGSIZE | STRINGSIZE |
| SUBRG | SUBSCRIPTRANGE |
| TRANSMIT ( MF ) | TRANSMIT |
| UNDEFINEDFILE ( MF ) | UNDEFINEDFILE |
| UNDERFLOW | CEE34D |
| ZERODIVIDE | CEE349 |
PL/I 言語指向コマンドは、Debug Tool がサポートするコマンド全体のうちの サブセットに過ぎません。
ステートメントの入力は、PL/I の DBCS フリー・フォームで行います。したがって、ステートメントがあいまいにならなければ、シフト・コードを自由に使用できます。
これにより、LIST NAMES の説明または特性に次の変更がなされます。
LIST NAMES db<.c.skk.w>ord
では、次のデータを探索します。
<.D.B.C.Skk.W.O.R.D>
言語によっては、異なる動作の結果になります。例えば、次の行を実行すると、C では a<kk>b が、PL/I では <.Akk.b> が検索されます。
LIST NAMES a<kk>*
この <kk> は、シフトアウト - 漢字 - シフトインを表します。
フリー・フォームの処理がコマンド解析機能にも追加され、現行プログラム言語 が PL/I の間は有効です。
ランタイム・オプション TEST(ERROR, ...) を使用して、Debug Tool を 初期設定できるのは、次のものだけです。
LIST STORAGE address は機能拡張され、address として、POINTER、Px 定数、あるいは ADDR 組み込み関数が使用可能になりました。
PL/I はすべての Debug Tool スカラー・セッション変数をサポートします。さらに、配列と構造体の宣言が可能です。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
Debug Tool は、コンパイラーが作成したシンボル・テーブルを使用し、名前を指定して プログラム変数に関する情報を入手します。シンボル・テーブルは、TEST(SYM) を使用してコンパイルすることにより、コンパイラーが使用できるようになります。
Debug Tool は、シンボル・テーブルを使用して、プログラム変数、被制御変数、自動変数、および ファイルや入り口定数のようなプログラム制御定数、さらに、CONDITION 条件名についての情報を入手します。基底付き変数、被制御変数、自動変数、および パラメーターは、これらのストレージがプログラム内で割り振られた後でのみ、Debug Tool で使用できます。この例外は DESCRIBE ATTRIBUTES であり、これは変数の属性を表示するために使用できます。
以下のデータ型のいずれかに基づく変数は、式で使用するときに明示的に修飾する必要があります。
例えば、次の宣言を行ったとします。
DECLARE P1 POINTER; DECLARE P2 POINTER BASED(P1); DECLARE DX FIXED BIN(31) BASED(P2);
これらの変数は、名前で直接参照することはできません。次のいずれかを指定した場合にのみ、この変数を参照できます。
P2->DX または P1->P2->DX
次のタイプのプログラム変数は、Debug Tool では使用できません。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
構造体の配列のエレメントを参照することはできません。例えば、PAYROLL という名の構造体が次のように 宣言されているとします。
Declare 1 Payroll(100),
2 Name,
4 Last char(20),
4 First char(15),
2 Hours,
4 Regular Fixed Decimal(5,2),
4 Overtime Fixed Decimal(5,2);
PAYROLL を宣言する方法が与えられると、次のコマンドの例は Debug Tool で 有効です。
LIST ( PAYROLL(1).NAME.LAST, PAYROLL(1).HOURS.REGULAR ); LIST ( ADDR ( PAYROLL) ) ; LIST STORAGE ( PAYROLL.HOURS, 128 );
PAYROLL を宣言する方法が与えられても、次のコマンドの例は Debug Tool で 無効です。
LIST ( PAYROLL(1) ); LIST (ADDR ( PAYROLL(5) ) ); LIST STORAGE ( PAYROLL(15).HOURS, 128 ) );
Debug Tool は、PL/I の型付き構造体のデバッグをサポートしません。変数を TYPE X (ここで X は DEFINE STRUCTURE から得られる) と宣言すると、その変数は型付きの構造体になります。
現行プログラム言語が PL/I の場合、式の解釈は PL/I 言語での定義と 同じように行われますが、Debug Tool でサポートされて いない PL/I 言語エレメントは例外です。
Debug Tool の式は PL/I の式と同じです。コマンドの入力手段が可変長レコードの入力手段 (端末など) の場合、かつ式が 1 行を超える場合、最終行を除くすべての行の終わりに 継続文字 (SBCS のハイフン) の指定が必要です。
PL/I の定数タイプはすべてサポートされ、さらに、Debug Tool PX 定数もサポートされます。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
Debug Tool は、PL/I (MVS および VM 用) の場合は次の組み込み関数をサポートします。
|
ABS ACOS ADDR ALL ALLOCATION ANY ASIN ATAN ATAND ATANH BINARYVALUE BINVALUE1 BIT BOOL CHAR COMPLETION COS COSD COSH COUNT |
CSTG2 CURRENTSTORAGE DATAFIELD DATE DATETIME DIM EMPTY ENTRYADDR ERF ERFC EXP GRAPHIC HBOUND HEX HIGH IMAG LBOUND LENGTH LINENO LOG |
LOG1 LOG2 LOW MPSTR NULL OFFSET ONCHAR ONCODE ONCOUNT ONFILE ONKEY ONLOC ONSOURCE PLIRETV POINTER POINTERADD POINTERVALUE PTRADD3 PTRVALUE4 |
REAL REPEAT SAMEKEY SIN SIND SINH SQRT STATUS STORAGE STRING SUBSTR SYSNULL TAN TAND TANH TIME TRANSLATE UNSPEC VERIFY |
Debug Tool は、Enterprise PL/I の場合は次の組み込み関数をサポートします。
|
ACOS ADDR ALLOCATION3 ASIN ATAN ATAND ATANH BIF_DIM BINARYVALUE BINVALUE COPY1 COS COSD COSH COUNT DATAFIELD DATE1 DATETIME1 DIMENSION ENDFILE ENTRYADDR1,2 ERF ERFC EXP FILEOPEN GAMMA HBOUND HEX |
HEXIMAGE HIGH1 IAND IEOR IOR INDEX INOT ISRL ISLL LBOUND LENGTH LINENO LOG LOG10 LOG2 LOGGAMMA LOW1 LOWER2 LOWERCASE1 MAXLENGTH NULL OFFSET OFFSETADD OFFSETSUBTRACT OFFSETDIFF |
OFFSETVALUE ORDINALNAME ORDINALPRED ORDINALSUCC ONCODE ONCONDCOND ONCHAR ONGSOURCE ONSOURCE ONCONDID ONCOUNT ONFILE ONKEY ONLOC PAGENO POINTER PTR POINTERADD PTRADD POINTERSUBTRACT PTRSUBTRACT |
POINTERDIFF PTRDIFF POINTERVALUE PTRVALUE PLIRETV RAISE2 REPEAT1 SAMEKEY SEARCH SEARCHR SIN SIND SINH SQRT SUBSTR1 SYSNULL TAN TAND TANH TALLY TIME1 TRANSLATE1 UNSPEC1 UPPERCASE1 VERIFY VERIFYR |
Debug Tool は、Enterprise PL/I の場合は次の組み込み関数をサポートしません。
|
ABS ALL ANY BIT BOOL CHAR COMPLETION CSTG(2) CURRENTSTORAGE |
EMPTY GRAPHIC IMAG MPSTR REAL STATUS STORAGE STRING |
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
Debug Tool の SET WARNING コマンドが ON にセットされて いるときに、組み込み関数 (BIF) が評価されると、ある種のチェックが行われます。
これらの検査による制限は、SET WARNING OFF を出すことにより除去できます。
次のリストに使用できない PL/I 関数をまとめてあります。
OS PL/I プログラムのデバッグ方法には制限がありますが、「連携開発環境プログラム/370 リリース 2 VS COBOL II と OS PL/I による連携開発環境プログラム (CODE)/370 の使い方」(SC88-7344-01) に説明があります。
OS PL/I コンパイラーは、リストのデータ・セットの名前をオブジェクト (ロード・モジュール) に残しません。Debug Tool は、リストのデータ・セットを userid.CUName.LIST の中から探そうとします。リストが PDS に入っている場合は、以下のいずれかの方法で、PDS のロケーション を Debug Tool に指示してください。
SET DEFAULT LISTINGS my.listing.pds
Enterprise PL/I プログラムをデバッグするときには、次のコマンドを使用できません。
Enterprise PL/I プログラムをデバッグするときには、次の制約事項が適用されます。