Rational Developer for System z バージョン 7.6

PL/I プログラムのデバッグ

ここでは以下のトピックで、Debug Tool を使用して PL/I プログラムを デバッグする方法を説明します。

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

PL/I コマンドの Debug Tool サブセット

下記の表に、PL/I コマンドの Debug Tool 解釈サブセット のリストを示します。このサブセットは、Debug Tool が認識する一群のコマンドであり、対応する PL/I コマンドの構文と処理に非常に似ているか、重複しています。このコマンドのサブセットは、現行のプログラム言語が PL/I の場合にのみ有効です。

コマンド 説明
Assignment スカラーおよびベクトルの割り当て
BEGIN 複合コマンド・グループ
CALL Debug Tool 手続き呼び出し
DECLARE または DCL セッション変数の宣言
DO 反復ループおよび複合コマンド・グループ
IF 条件付きの実行
ON 例外ハンドラーの定義
SELECT 条件付きの実行

PL/I 言語ステートメント

PL/I ステートメントは、Debug Tool コマンド として入力されます。Debug Tool は、それぞれの言語に類似した方法でコマンドを出すことができるように しています。

次のタイプの Debug Tool コマンドが、PL/I ステートメントの構文を サポートしています。

このコマンドで、式を評価します。
ブロック
BEGIN/ENDDO/ENDPROCEDURE/END

これらのコマンドが、複数の Debug Tool コマンドを「1 つ」の コマンド・グループにまとめる手段となります。

条件
IF/THENSELECT/WHEN/END

これらのコマンドは、式を評価し、その値にもとづいて Debug Tool コマンドの 実行の流れを制御します。

宣言
DECLARE または DCL

これらのコマンドが、セッション変数を定義する手段となります。

ループ
DO/WHILE/UNTIL/END

反復ループあるいは条件付きループを Debug Tool コマンドとして プログラムできます。

制御の移動
GOTO、ON

コマンドのグループの実行の流れを無条件で変更する手段となります。

下の表に、現行プログラム言語が 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 の拡張版です。
  1. DO; command(s); END;
  2. DO WHILE | UNTIL expression; command(s); END;
  3. DO reference=specifications; command(s); END;
IF IF / ELSE には ENDIF は不要です。
SELECT SELECT / WHEN / OTHERWISE / END の プログラミング構造が追加されました。

PL/I の %PATHCODE 値

下の表は、現行プログラム言語が 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 の条件および条件処理

すべての 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
注:
Enterprise PL/I プログラムの場合は、次の条件はサポートされません。
注:
PL/I プログラムの実行中に、被制御変数のための ALLOCATE ステートメントがあると、Debug Tool 条件 ALLOCATE は、ON ALLOCATE 条件を発生させます。

PL/I 言語指向コマンドは、Debug Tool がサポートするコマンド全体のうちの サブセットに過ぎません。

PL/I DBCS 自由形式フォーマットでのコマンドの入力

ステートメントの入力は、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, ...) ランタイム・オプションが有効である場合の PL/I プログラム用の Debug Tool の初期設定

ランタイム・オプション TEST(ERROR, ...) を使用して、Debug Tool を 初期設定できるのは、次のものだけです。

Debug Tool の LIST STORAGE PL/I コマンドの拡張

LIST STORAGE address は機能拡張され、address として、POINTERPx 定数、あるいは ADDR 組み込み関数が使用可能になりました。

Debug Tool セッション変数の PL/I サポート

PL/I はすべての Debug Tool スカラー・セッション変数をサポートします。さらに、配列と構造体の宣言が可能です。

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

PL/I プログラム変数へのアクセス

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 では使用できません。

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

PL/I 構造体へのアクセス

構造体の配列のエレメントを参照することはできません。例えば、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 から得られる) と宣言すると、その変数は型付きの構造体になります。

Debug Tool による PL/I の式の計算

現行プログラム言語が PL/I の場合、式の解釈は PL/I 言語での定義と 同じように行われますが、Debug Tool でサポートされて いない PL/I 言語エレメントは例外です。

Debug Tool の式は PL/I の式と同じです。コマンドの入力手段が可変長レコードの入力手段 (端末など) の場合、かつ式が 1 行を超える場合、最終行を除くすべての行の終わりに 継続文字 (SBCS のハイフン) の指定が必要です。

PL/I の定数タイプはすべてサポートされ、さらに、Debug Tool PX 定数もサポートされます。

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

サポートされている PL/I 組み込み関数

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
PTRVALUE
4
REAL
REPEAT
SAMEKEY
SIN
SIND
SINH
SQRT
STATUS
STORAGE
STRING
SUBSTR
SYSNULL
TAN
TAND
TANH
TIME
TRANSLATE
UNSPEC
VERIFY

注:
  1. BINARYVALUE の省略語
  2. CURRENTSTORAGE の省略語
  3. POINTERADD の省略語
  4. POINTERVALUE の省略語

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

注:
  1. z/OS® バージョン 1 リリース 6 上で実行中の場合、組み込み関数 COPY、DATE、DATETIME、ENTRYADDR、HIGH、LOW、LOWERCASE、REPEAT、SUBSTR、TIME、TRANSLATE、UNSPEC、 UPPERCASE を使用するには、言語環境プログラムの APAR PQ94347 に対応した ランタイム PTFを適用します。
  2. 疑似変数は、Debug Tool の下では ENTRYADDR 組み込み関数に対してサポートされません。
  3. z/OS バージョン 1 リリース 6 またはバージョン 1 リリース 7 上で実行中の場合、ALLOCATION 組み込み関数を使用するには、言語環境プログラムの APAR PK16316 に対応した ランタイム PTF を適用します。

Debug Tool は、Enterprise PL/I の場合は次の組み込み関数をサポートしません。

ABS
ALL
ANY
BIT
BOOL
CHAR
COMPLETION
CSTG(2)
CURRENTSTORAGE

EMPTY
GRAPHIC
IMAG
MPSTR
REAL
STATUS
STORAGE
STRING

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

組み込み関数とともに SET WARNING PL/I コマンドを使用する場合

Debug Tool の SET WARNING コマンドが ON にセットされて いるときに、組み込み関数 (BIF) が評価されると、ある種のチェックが行われます。

これらの検査による制限は、SET WARNING OFF を出すことにより除去できます。

サポートされない PL/I 言語エレメント

次のリストに使用できない PL/I 関数をまとめてあります。

OS 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 に指示してください。

Enterprise PL/I プログラムをデバッグするときの制約事項

Enterprise PL/I プログラムをデバッグするときには、次のコマンドを使用できません。

Enterprise PL/I プログラムをデバッグするときには、次の制約事項が適用されます。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)