非言語環境プログラムの COBOL に関する基本的なデバッグ・タスクの説明では、下記のプログラムを参照します。
例: デバッグ用のサンプルの非言語環境プログラムの COBOL プログラム
本書の内容を読み進むときに注意すべきことは、言語環境プログラムのライブラリーを 使用してプログラムをリンクおよび実行したとしても、OS/VS COBOL プログラムは非言語環境プログラムのプログラムであるということです。
NOTEST コンパイラー・オプションを使用してコンパイルし、非言語環境プログラムのライブラリーとリンクした VS COBOL II プログラムは、非言語環境プログラムのプログラムです。TEST コンパイラー・オプションを使用してコンパイルし、言語環境プログラムのライブラリーとリンクした VS COBOL II プログラムは、言語環境プログラムのプログラムです。
非言語環境プログラムの COBOL に固有の情報が提供されている場合を除き、Debug Tool の始動方法と非言語環境プログラムの COBOL プログラムのデバッグ方法については、非言語環境プログラムのプログラムに関する情報を参照してください。
下記のプログラムは、デバッグ・タスクを示すために各種のトピックで取り上げられます。これは、非言語環境プログラムの COBOL プログラムの見本として使用される OS/VS COBOL プログラムです。
このサンプル・プログラムを実行するには、以下のステップを行います。
LDD (COB03O,COB03AO) ;
このプログラムは、別の OS/VS COBOL プログラム (COB03A0) を呼び出す OS/VS COBOL プログラム (COB03O) の小さな例です。
ロード・モジュール: COB03O
COB03O
******************************************************
* PROGRAM NAME: COB03O *
* *
* COMPILED WITH IBM OS/VS COBOL COMPILER *
******************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. COB03O.
******************************************************************
* *
* LICENSED MATERIALS - PROPERTY OF IBM *
* *
* 5655-P14: Debug Tool for z/OS *
* (C) Copyright IBM Corp. 2005 All Rights Reserved *
* *
* US GOVERNMENT USERS RESTRICTED RIGHTS - USE, DUPLICATION OR *
* DISCLOSURE RESTRICTED BY GSA ADP SCHEDULE CONTRACT WITH IBM *
* CORP. *
* *
* *
******************************************************************
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LOAN PIC 999999.
01 INTEREST-RATE PIC 99V99.
01 INTEREST-DUE PIC 999999.
01 INTEREST-SAVE PIC 999999.
01 INTEREST-AFTER-MULTIPLY PIC 999999.
01 INTEREST-AFTER-DIVIDE PIC 999999.
* DATE THAT WILL RECEIVE INCREMENTED JULIAN-DATE
01 INC-DATE PIC 9(7).
* LOOP COUNT TO INCREMENT DATE 1000 TIMES *
01 LOOPCOUNT PIC 9999.
* JULIAN DATE
01 JULIAN-DATE PIC 9(7).
01 J-DATE REDEFINES JULIAN-DATE.
05 J-YEAR PIC 9(4).
05 J-DAY PIC 9(3).
* SAVE DATE
01 SAVE-DATE PIC 9(7).
PROCEDURE DIVISION.
PROG.
ACCEPT JULIAN-DATE FROM DAY
DISPLAY 'JULIAN DATE: ' JULIAN-DATE
MOVE JULIAN-DATE TO SAVE-DATE
MOVE 10000 TO LOAN
CALL 'COB03AO' USING LOAN INTEREST-DUE.
DISPLAY 'LOAN: ' LOAN
DISPLAY 'INTEREST-DUE: ' INTEREST-DUE
STOP RUN.
COB03AO
******************************************************
* PROGRAM NAME: COB03AO *
* *
* COMPILED WITH IBM OS/VS COBOL COMPILER *
******************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. COB03AO.
******************************************************************
* *
* LICENSED MATERIALS - PROPERTY OF IBM *
* *
* 5655-P14: Debug Tool for z/OS *
* (C) Copyright IBM Corp. 2005 All Rights Reserved *
* *
* US GOVERNMENT USERS RESTRICTED RIGHTS - USE, DUPLICATION OR *
* DISCLOSURE RESTRICTED BY GSA ADP SCHEDULE CONTRACT WITH IBM *
* CORP. *
* *
* *
******************************************************************
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 INTEREST-RATE PIC 99V99 VALUE 0.22.
LINKAGE SECTION.
01 USING-LIST.
02 LOANAMT PIC 999999.
02 INTEREST PIC 999999.
PROCEDURE DIVISION USING USING-LIST.
PROG.
COMPUTE INTEREST = LOANAMT * INTEREST-RATE.
DISPLAY 'INTEREST-RATE: ' INTEREST-RATE.
GOBACK.
非言語環境プログラムの COBOL プログラムをデバッグするには、事前にコンパイル単位 (CU) を非言語環境プログラムの COBOL CU として定義し、CU のデバッグ・データをロードしておく必要があります。これは、逆アセンブリー CU として現在 Debug Tool に認識されている CU、または現在 Debug Tool に認識されていない CU に対してのみ実行することができます。
LOADDEBUGDATA コマンド (短縮形は LDD) を使用して、逆アセンブリー CU を非言語環境プログラムの COBOL CU として定義し、この CU のデバッグ・データをロードさせます。LDD コマンドを呼び出す場合、単一の CU 名を指定するか、または括弧で囲んだ CU 名のリストを指定することができます。指定されるそれぞれの名前は、以下のいずれかでなければなりません。
CU 名が現在 Debug Tool に認識されている場合、その CU は即時に非言語環境プログラムの COBOL CU としてマークされ、以下のようにして、そのデバッグ・データのロードが試みられます。
LDD コマンドに指定した CU 名が現在 Debug Tool に認識されていない場合、 メッセージが出され、その名前の CU が認識される (現れる) まで、LDD コマンドは据え置かれます。 その時点で CU が自動的に非言語環境プログラムの COBOL CU として作成され、デフォルト・データ・セット名または現行の SET DEFAULT LISTINGS 指定を使用して、デバッグ・データのロードが試みられます。
CU に対して LDD コマンドを入力した後は、CU を逆アセンブリー CU として表示できません。
LDD コマンドを入力した後 Debug Tool が関連のデバッグ・データを見つけられない場合、その CU は逆アセンブリー CU ではなく、非言語環境プログラムの COBOL CU です。この CU に対してもう一度 LDD コマンドを入力することはできません。 ただし、SET DEFAULT LISTING コマンドまたは SET SOURCE コマンドを入力して、 関連のデバッグ・データを別のデータ・セットからロードすることができます。
LDD コマンドを使用して、CU を非言語環境プログラムの COBOL CU として識別する必要があります。その CU が、LDD コマンドを入力したときにまだロードされていないロード・モジュール の一部である場合、Debug Tool は、CU が検出されなかったこと、および LDD コマンドの実行が据え置かれたことを示すメッセージを表示します。 後でその CU が逆アセンブリー CU として現れると、LDD コマンド は、その時点で実行されます。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
例: デバッグ用のサンプルの非言語環境プログラムの COBOL プログラム
COB03AO ルーチンが呼び出された後で停止するには、次のコマンドを入力します。
AT ENTRY COB03AO ;
AT CALL コマンドは、非言語環境プログラムの COBOL ルーチンではサポートされません。 非言語環境プログラムの COBOL ルーチンが呼び出されたときに Debug Tool を停止するのに、AT CALL コマンドを使用しないでください。
プログラム内に多くのブレークポイントを設定しており、プログラムのどこで停止したか を知りたい場合には、以下のコマンドを入力することができます。
QUERY LOCATION
Debug Tool ログ・ウィンドウには、次のようなメッセージが表示されます。
QUERY LOCATION You are executing commands in the ENTRY COB03O ::> COB03AO breakpoint. The program is currently entering block COB03O ::> COB03AO.
単一の変数の内容を表示するには、ソース・ウィンドウ内の変数名の存在箇所にカーソルを移動させ、PF4(LIST) を押します。値はログ・ウィンドウに表示されます。これは、コマンド行に LIST variable コマンドを入力するのと同等です。
例えば、COB03O プログラムを CALL ステートメントまで 実行するには、Debug Tool コマンド行に AT 56 ; GO ; と入力します。カーソルを LOAN の上に移動し、PF4 (LIST) を押します。Debug Tool は、ログ・ウィンドウに次のメッセージを表示します。
LIST ( 'LOAN ') LOAN = 10000
LOAN の値を 100 に変更するには、コマンド行に 'LOAN' = '100' と入力して、Enter を押します。
変数 LOAN の属性を表示するには、次のコマンドを入力します。
DESCRIBE ATTRIBUTES LOAN
Debug Tool は、ログ・ウィンドウに次のメッセージを表示します。
ATTRIBUTES for LOAN Its address is 0002E500 and its length is 6 LOAN PIC 999999
COB03AO の呼び出しに入るには、PF2 (STEP) を押します。
ユーザー・プログラムの特定の部分が、最初の数千回は 正常に機能しますが、ある条件のもとでは失敗するということが よくあります。行のブレークポイントの設定では、GO コマンドを繰り返し入力する必要があるため非効率的です。
例: デバッグ用のサンプルの非言語環境プログラムの COBOL プログラム
COB03AO プログラムで LOANAMT 変数が 100 に設定されている場合に Debug Tool を停止するには、 次のコマンドを入力します。
AT 36 DO; IF 'LOANAMT ^= 100' THEN GO; END;
行 36 は、COMPUTE INTEREST = LOANAMT * INTEREST-RATE. の行になります。 このコマンドにより、Debug Tool は行 36 で停止します。LOANAMT の値が 100 でない場合、プログラムは続行します。このコマンド により、Debug Tool は、LOANAMT の値が 100 の場合にのみ行 36 で停止します。
例: デバッグ用のサンプルの非言語環境プログラムの COBOL プログラム
COB03AO プログラムへの入り口点にブレークポイントを設定しようとしていて、 デバッグ情報が COB03AO については入手できるが COB03O については入手できないとします。こうした状況で、Debug Tool は空のソース・ウィンドウを表示します。 Debug Tool に認識されるコンパイル単位のリストを表示するには、以下のコマンドを入力します。
SET ASSEMBLER ON LIST NAMES CUS
LIST NAMES CUS コマンドは、Debug Tool が認識しているすべてのコンパイル単位のリストを表示します。COB03AO が後からアプリケーションによりフェッチされる場合、Debug Tool に認識されていないことがあります。下のコマンドを入力します。
LDD COB03AO AT ENTRY COB03AO GO
プログラミング・エラーの検討中に、どのような順序の呼び出しがそのプログラミング・エラーを もたらしたのかを把握したいことがよくあります。この順序は、トレースバック、 または呼び出し元のトレースバックと呼ばれます。 トレースバック情報を取得するには、次のコマンドを入力します。
LIST CALLS
例: デバッグ用のサンプルの非言語環境プログラムの COBOL プログラム
例えば、以下のコマンドを使用して例を実行すると、ログ・ウィンドウには、 呼び出し側のトレースバックが表示されます。
LDD (COB03O,COB03AO) ; AT ENTRY COB03AO ; GO ; LIST CALLS ;
ログ・ウィンドウには、次のような情報が表示されます。
At ENTRY in non-LE COBOL program COB03O ::> COB03AO. From LINE 74 in non-LE COBOL program COB03O ::> COB03O.
プログラムの実行中に、あるストレージが予期せずにその値を変更し、いつ、どこでこのようなことが生じたかを調べたい場合があります。 非言語環境プログラムの COBOL プログラムのトレースバックの取得に説明されている例で、LOAN が予期せずに変更されたことを プログラムで検出するものとします。 LOAN の値の変更を監視するブレークポイントを設定するには、 以下のコマンドを入力します。
AT CHANGE 'LOAN';
プログラムの実行中に LOAN の値が変わると、Debug Tool は停止します。