29.6.1 CBLDATADUMP
CBLDATADUMPサービスルーチンは,COBOLプログラム実行時の任意の時点でのデータ領域ダンプリストを出力するサービスルーチンです。
通常は,COBOLプログラムが異常終了したときにデータ領域ダンプリストを出力しますが,CBLDATADUMPサービスルーチンによって,プログラム実行中に異常終了時と同様のデータ領域ダンプリストを出力できます。これにより,異常終了時だけでなく,プログラム実行中の任意の時点のデータ領域の状態を求めることができます。
データ領域ダンプリストには,CBLDATADUMPサービスルーチンを呼び出すまでに実行されたすべてのプログラムのうち,デバッグ対象プログラムのデータ領域の状態が出力されます※。
データ領域ダンプリストは,CBLDATADUMPサービスルーチンを実行するごとに追加書きされるので,各時点のデータをトレース情報として保持できます。
データ領域ダンプリストについては,「36.3 データ領域ダンプリスト」を参照してください。
CBLDATADUMPサービスルーチンは,次に示す場合に実行します。
-
COBOLプログラムのデバッグ時に,ある状態のデータ領域の内容を参照する場合
-
COBOLプログラムのデバッグ時に,データ領域の内容の遷移を確認する場合
-
COBOLプログラムが異常終了したときに,データ領域の内容の遷移を採取し,異常終了の原因を調査する場合
- 注※
-
-
デバッグ対象プログラムは,次のどれかのコンパイラオプションを指定したプログラムを示します。どのプログラムをデータ領域ダンプリストに出力するかは,これらのコンパイラオプションの指定有無によって切り分けることができます。
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange
-
デバッグ対象プログラムであっても,プログラムの実行状態などによって,情報が出力されない場合があります。例えば,実行後にCANCELされたプログラムはダンプ出力の対象となりません。情報出力の対象となるプログラムの実行状態については,規則のデータ領域ダンプリスト出力の対象となるプログラムを参照してください。
-
- 記述例
CALL 'CBLDATADUMP'
- 引数
-
なし。
- 戻り値
-
戻り値は次のように設定されます。
0:正常終了した場合
1:環境変数CBLDATADUMPFILEが指定されていない場合
2:どのプログラムのデータ状態も出力されなかった場合
どのプログラムのデータ状態も出力されなかった場合,データ領域ダンプリストにはヘッダだけが出力されます。次の場合に該当します。
-
1回以上実行されたプログラムにデバッグ対象プログラムがない場合
-
実行されたすべてのデバッグ対象プログラムが,規則のデータ領域ダンプリスト出力の対象となるプログラムではなく,EXTERNAL句を指定したファイル名およびデータ名の出力もない場合
-
データ領域ダンプリスト出力情報の選択で,選択した範囲に出力情報がない場合
データ領域ダンプリスト出力情報の選択方法については,「36.4 データ領域ダンプリスト出力情報の選択」を参照してください。
-1:データ領域ダンプリストの出力中にエラー※が発生した場合
- 注※
-
次の要因が考えられます。
-
環境変数CBLDATADUMPFILEで指定したファイルが開けない
-
データ領域ダンプリストの出力処理中に入出力エラーが発生した
-
環境変数CBLDATADUMPFILEで指定したファイルを閉じられない
-
-
- 規則
-
-
データ領域ダンプリストの出力先は,環境変数CBLDATADUMPFILEで指定します。環境変数CBLDATADUMPFILEの指定がない場合,または出力先が指定されていない場合,データ領域ダンプリストは出力されません。環境変数CBLDATADUMPFILEの指定方法については,「36.3.2 データ領域ダンプリストの出力先」を参照してください。
-
データ領域ダンプリストの出力対象とするプログラムは,プログラム翻訳時に次のどれかのコンパイラオプションの指定が必要です。
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange
-
データ領域ダンプリスト出力の対象となるのは次のプログラムです。
・1回以上実行され,CANCEL文で取り消されていないプログラム
・1回以上実行された利用者定義関数
・CBLDATADUMPサービスルーチン実行時に動作中のメソッド
・CBLDATADUMPサービスルーチン実行時に動作中のメソッドを含むクラス
-
- 注意事項
-
-
データ領域ダンプリストは追加書きのため,古い情報が残ります。そのため,不要なデータ領域ダンプリストは削除してください。
-
- 使用例
-
CBLDATADUMPサービスルーチン呼び出しの例を次に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. : DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA1 PIC S9(4). 01 DATA2 PIC S9(4) VALUE 1. 01 DATA3 PIC S9(4) VALUE 0. : PROCEDURE DIVISION. MOVE 1 TO DATA1.・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・1. CALL 'CBLDATADUMP'.・・・・・・・・・・・・・・・・・・・・・・・・・・・2. IF RETURN-CODE NOT = 0 THEN DISPLAY 'CBLDATADUMPが失敗しました。' END-IF. : MOVE 100 TO DATA1.・・・・・・・・・・・・・・・・・・・・・・・・・・・・・3. CALL 'CBLDATADUMP'.・・・・・・・・・・・・・・・・・・・・・・・・・・・4. IF RETURN-CODE NOT = 0 THEN DISPLAY 'CBLDATADUMPが失敗しました。' END-IF. :
-
データ領域の内容を設定します。
-
CBLDATADUMPサービスルーチンを呼び出し,データ領域ダンプリストを出力します。
-
データ領域の内容を更新します。
-
CBLDATADUMPサービスルーチンを呼び出し,データ領域ダンプリストを出力します。2.で出力したデータ領域ダンプリストと比較し,各データが正しく更新できていることを確認します。
-