デバッグ機能単位

デバッグ機能単位(debug module)は、実行用プログラムを実行中に手続きを監視する条件を表現する手段を利用者に提供する。

ANSIデバッグ機能単位は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

この構文は、Micro Focus COBOLに組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、デバッグ機能単位は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの機能単位を使用するべきではない。

標準ANSI COBOL デバッグ

何を監視しどのような情報を表示するかは利用者が決めることである。COBOLのデバッグ機能は、単に関連する情報を容易に取り出す手段を提供するだけである。

COBOLのデバッグ機能単位をサポートする言語機能には、下記のものがある。

予約語の DEBUG-ITEMは、デバッグ機能をサポートするCOBOLシステムによって自動的に生成される、特殊レジスタの名前である。DEBUG-ITEMは1プログラムあたりに1つだけ割り当てられる。DEBUG-ITEMの下位のデータ項目の名前も、予約語である。

ランタイムスイッチ

環境部の翻訳用計算機段落の中に、DEBUGGING MODE句を書く。これはプログラム中に記述されているデバッグ文に関する、ランタイムスイッチとしての働きをする。

プログラム中に WITH DEBUGGING MODE句を指定すると、すべてのデバッグ節とすべてのデバッグ行が、このマニュアルのこの節に記載したとおりに機能する。

プログラム中にDEBUGGING MODE句を指定しないと、すべてのデバッグ節とすべてのデバッグ行は、注記行のように扱われ、その構文のチェックも行われない。

COBOL デバッグランタイムスイッチ

ランタイムスイッチは、COBOLシステムによって挿入されたデバッグ用のコードを動的に起動する。このスイッチは、プログラムの中からは操作できない。このスイッチは、COBOL環境の外部で制御される。このスイッチが「オン」であると、原始プログラム中に記述されているUSE FOR DEBUGGING文が効力を発揮する。このスイッチが「オフ」であると、原始プログラム中に記述されているUSE FOR DEBUGGING文の効力はすべて停止される。USE FOR DEBUGGING文の効力を発揮させたり停止したりするために、実行用プログラムを生成し直す必要はない。

原始プログラム中にWITH DEBUGGING MODE句を指定しないと、ランタイムスイッチは実行用プログラムの実行に何の影響も及ぼさない。

COBOL デバッグにおける環境部

WITH DEBUGGING MODE 句

WITH DEBUGGING MODE句は、すべてのデバッグ節とすべてのデバッグ行を実行用プログラムに含めるように指示する。この句を指定しないと、すべてのデバッグ節とすべてのデバッグ行は、注記行のように扱われる。

WITH DEBUGGING MODE句は中核でも使用でき、ANSI '85の廃要素には指定されていない。

一般形式

一般規則

  1. 環境部の 翻訳用計算機段落の中にWITH DEBUGGING MODE句を指定すると、すべてのUSE FOR DEBUGGING文とすべてのデバッグ行が実行用プログラムに含められる。

  2. 環境部の翻訳用計算機段落の中にWITH DEBUGGING MODE句を指定しないと、どのUSE FOR DEBUGGING文も、それに関連するすべてのデバッグ節もデバッグ行も、注記文であるように扱われる。


注: WITH DEBUGGING MODE句はANSIデバッグ機能単位と同様に、中核の一部である。ANSI標準の次回の全面改訂の際にも、削除される予定はない。


COBOL デバッグにおける手続き部

READY TRACE(追跡開始)文

READY TRACE(追跡開始)文は、デバッグ用の機能を果たす文である。処理の流れが経過した順に、節名と段落名を画面に表示するようにする。

一般形式

一般規則

  1. この文の実行を可能にするためには、COBOLシステムのTRACE指令をオンに設定しておく。TRACE指令をオンに設定しておかないと、READY TRACE文は注記になる。

  2. READY TRACEは受け付けられるが、注記としてだけ扱われる。

RESET TRACE(追跡停止)文

RESET TRACE(追跡停止)文は、節名および段落名を追跡して画面に表示する機能を、停止する。

一般形式

一般規則

  1. この文の実行を可能にするためには、COBOLシステムの TRACE指令をオンに設定しておく。TRACE指令をオンに設定していないかREADY TRACEが起動されていないと、RESET TRACE文は注記になる。

  2. RESET TRACEは受け付けられるが、注記としてだけ扱われる。

USE FOR DEBUGGING(デバッグ用使用)文

USE FOR DEBUGGING(デバッグ用使用)文は、関連するデバッグ節によって監視する、利用者項目を指定する。

一般形式

ランタイムスイッチ

  1. 次のランタイムスイッチは、この節で説明した構文や意味に影響することがある。

    • D - ANSIデバッグ機能の起動

構文規則

  1. デバッグ節を指定する場合は、 DECLARATIVESヘッダ(宣言部分の見出し)の直後にまとめて置く。

  2. USE FOR DEBUGGING文そのものを除いて、デバッグ節の中から非宣言手続きを参照してはならない。

    この制限は強制しない。

  3. デバッグ節の外に記述した文から、デバッグ節の中に定義した手続き名を参照してはならない。

  4. USE FOR DEBUGGING文そのものを除いて、あるデバッグ節の中に記述した文から別のUSE手続き内に定義されている手続き名を参照するために使用できる文は、PERFORM文だけである。

  5. デバッグ節内に定義した手続き名を、USE FOR DEBUGGING文の中に指定してはならない。

  6. どの識別子、通信記述名、ファイル名、手続き名も、1つのUSE FOR DEBUGGING文の中では1回だけ指定することができる。

  7. ALL PROCEDURES(すべての手続き)指定は、同一のプログラム中に1回だけ書くことができる。

  8. ALL PROCEDURES指定をした場合、どのUSE FOR DEBUGGING文の中にも手続き名-1、手続き名-2などを指定してはならない。

  9. 一意名-1、一意名-2などによって参照されるデータ項目のデータ記述項が、OCCURS句を含んでいるかまたはOCCURS句を含むデータ記述項の下位に属する場合、通常は、一意名-1、一意名-2などには必要な添字または指標を付けてはならない。

  10. 特殊レジスタである DEBUG-ITEM DEBUG-ITEMは、デバッグ節からだけ参照できる。

一般規則

  1. デバッグ節の中に記述した文によって、デバッグ節が自動的に起動されることはない。

  2. USE FOR DEBUGGING文の中にファイル名-1を指定すると、下記の場合に、該当するデバッグ節が実行される。

    1. ファイル名-1を参照するOPEN文またはCLOSE文が実行された後

    2. (USE手続きの後に指定されている)READ文が実行された後で、付随するAT END指定またはINVALID KEY指定の無条件文が実行されない場合

    3. ファイル名-1を参照するDELETE文またはSTART文が実行された後

  3. USE FOR DEBUGGING文の中に手続き名-1を指定すると、下記の場合に、該当するデバッグ節が実行される。

    1. 指定した手続きが実行される直前

    2. 手続き名-1を参照するALTER文が実行された直後

  4. ALL PROCEDURE指定をすると、上記の一般規則4に記述した事柄が、該当するプログラム中のすべての手続き名に適用される。ただし、デバッグ節の中に指定した手続き名を除く。

  5. ALL REFERENCES OF(すべての参照)句を付けて一意名-1を指定すると、識別子-1を明示的に参照する下記の文の実行に関連して、該当するデバッグ節が実行される。

    1. WRITE文またはREWRITE文が実行される直前。ただし、FROM句が指定されている場合は、暗黙の転記が実行された後。

    2. DEPENDING ON指定を伴うGO TO文に関して、制御が移される直前、および制御が移される先の手続き名に関連するデバッグ節が実行される前。

    3. PERFORM文の中で一意名-1を参照するVARYING指定かAFTER指定かUNTIL指定をしている場合、その一意名-1によって参照されるデータ項目の内容が初期化または変更または評価された直後。

    4. その他のCOBOL文が実行された直後。

    実行も評価もされない指定の中に一意名-1を書いた場合、関連するデバッグ節は実行されない。

  6. ALL REFERENCES OF指定をしないで一意名-1を指定すると、下記のそれぞれの時点で、該当するデバッグ節が実行される。

    1. 一意名-1を明示的に参照するWRITE文またはREWRITE文が実行される直前。ただし、FROM句が指定されている場合は、暗黙の転記が実行された後。

    2. PERFORM文の中で一意名-1を参照するVARYING指定かAFTER指定かUNTIL指定をしている場合、その一意名-1によって参照されるデータ項目の内容が初期化または変更または評価された直後。

    3. 一意名-1を明示的に参照しその一意名によって示されるデータ項目の内容を変更する、その他のCOBOL文が実行された直後。

    実行も評価もされない指定の中に一意名-1を書いた場合、関連するデバッグ節は実行されない。

  7. 1つの文に関しては、同じ作用対象を何回指定しても、その作用対象に関するデバッグ節は1回しか実行されない。対象とする手続きを繰り返し実行するPERFORM文の場合は、各繰り返しのたびに、関連するデバッグ節が実行される。

    1つの無条件文の中では、個々の無条件動詞は、デバッグの目的上は別々の文とみなされる。

  8. USE FOR DEBUGGING文中に通信記述名-1を指定した場合、デバッグ節は下記の場合に実行される。

    1. 通信記述名-1を参照するENABLE文かDISABLE文かSEND文が実行された後。

    2. 通信記述名-1を参照するRECEIVE文が実行された後。ただし、NO DATA無条件文が実行された場合を除く。

    3. 通信記述名-1を参照するACCEPT MESSAGE COUNT文が実行された後。

  9. 修飾語としてファイル名-1、一意名-1、手続き名-1、通信記述名-1を使用した場合は、上記の一般規則に記述されているデバッグのための参照にはあたらない。

  10. デバッグ節が実行されるたびに、特殊レジスタの DEBUG-ITEMに、その実行の基となった条件に関する情報が記録される。 DEBUG-ITEMは、暗黙的に下記のように記述されている。
     01 debug-item.
         02 debug-line      pic x(6).
         02 filler          pic x value space.
         02 debug-name      pic x(30).
         02 filler          pic x value space.
         02 debug-sub-1     pic s9999 sign is leading separate character.
         02 filler          pic x value space
         02 debug-sub-2     pic s9999 sign is leading separate character.
         02 filler          pic x value space.
         02 debug-sub-3     pic s9999 sign is leading separate character.
         02 filler          pic x value space.
         02 debug-contents  pic x(n).

  11. 毎回デバッグ節が実行される前に、データ項目DEBUG-ITEMの内容が空白で埋められる。その後で、DEBUG-ITEMの下位項目の内容が下記の一般規則に従って更新され、それから直ちに制御がデバッグ節に移される。下記の一般規則に触れられていないデータ項目の内容は、空白のまま残る。

    更新はMOVE(転記)文の規則に従って行われる。ただし、DEBUG-CONTENTSへの転記は唯一の例外で、データの内部表現の型に違いがあっても変換することなく、英数字基本項目間の転記として扱われる。

  12. DEBUG-LINEの内容は、対応するCOBOL原始プログラムの行番号である。これは原始プログラム中の該当行を識別する手段となる。

  13. DEBUG-NAMEの内容は、デバッグ節を起動した要因の名前の上30文字である。

    DEBUG-NAME中では、すべての修飾語は語INまたはOFで区切られている。

    添字や指標は、付けられていても、DEBUG-NAMEには入れられない。

  14. デバッグ節を起動する要因となったデータ項目が添字付けまたは指標付けされている場合、各レベルの出現番号がそれぞれDEBUG-SUB-1とDEBUG-SUB-2とDEBUG-SUB-3に入れられる。

  15. DEBUG-CONTENTSは、下記の一般規則によって必要となるデータを記憶しておくのに十分な大きさのデータ項目である。

  16. プログラム中の宣言手続きではない最初の手続きが最初に実行されたときに、デバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、その手続きの最初の文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続きの名前が入れられる。

    3. DEBUG-CONTENTSには、"START PROGRAM" が入れられる。

  17. ALTER文中で手続き名-1を参照したことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、手続き名-1を参照したALTER文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続き名-1が入れられる。

    3. DEBUG-CONTENTSには、ALTER文のTO指定の対象となった手続き名が入れられる。

  18. GO TO文によって制御が移されたことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、手続き名-1に制御を移したGO TO文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続き名-1が入れられる。

  19. SORT文またはMERGE文のINPUT指定またはOUTPUT指定中の手続き名-1を参照したことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、手続き名-1を参照したSORT文またはMERGE文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続き名-1が入れられる。

    3. DEBUG-CONTENTSには、下記のデータが入れられる。

      1. SORT文のINPUT指定において手続き名-1が参照された場合は、"SORT INPUT"。

      2. SORT文のOUTPUT指定において手続き名-1が参照された場合は、"SORT OUTPUT"。

      3. MERGE文のOUTPUT指定において手続き名-1が参照された場合は、"MERGE OUTPUT"。

  20. PERFORM文の制御機構によって制御が移されたことによって、手続き名-1に関連するデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、手続き名-1を参照したPERFORM文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続き名-1が入れられる。

    3. DEBUG-CONTENTSには、"PERFORM LOOP" が入れられる。

  21. USE文によって手続き名-1が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、USE手続が実行される基となった文を識別する情報が入れられる。

    2. DEBUG-NAMEには、その手続き名-1が入れられる。

    3. DEBUG-CONTENTSには、"USE PROCEDURE" が入れられる。

  22. 先行する段落から手続き名-1に暗黙的に制御が移されたことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、前の文を識別する情報が入れられる。

    2. DEBUG-NAMEには、手続き名-1が入れられる。

    3. DEBUG-CONTENTSには、"FALL THROUGH" が入れられる。

  23. ファイル名-1と通信記述名-1を参照したことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、ファイル名-1と通信記述名-1を参照した文を識別する情報が入れられる。

    2. DEBUG-NAMEには、ファイル名-1と通信記述名-1が入れられる。

    3. READ文でファイル名-1を参照した場合、DEBUG-CONTENTSには読み込まれたレコード全体が入れられる。

    4. READ文以外の文でファイル名-1を参照した場合、DEBUG-CONTENTSには空白が入れられる。

    5. 通信記述名-1を参照した場合、DEBUG-CONTENTSには通信記述名に関連する領域の内容が入れられる。

  24. 一意名-1を参照したことによってデバッグ節が実行されると、DEBUG-ITEMの内容は下記のようになる。

    1. DEBUG-LINEには、一意名-1を参照した文を識別する情報が入れられる。

    2. DEBUG-NAMEには、一意名-1が入れられる。

    3. DEBUG-CONTENTSには、デバッグ節に制御が移されたときの一意名-1のデータ項目の内容が入れられる(一般規則の5と6を参照)。

デバッグ行

デバッグ行は、標識領域に"D" または "d" と書かれている行である。境界Aから境界Rまでがすべて空白であるデバッグ行は、空白行とみなされる。

デバッグ行の内容は、それが注記行とみなされるか否かにかかわらず、文法的に正しいプログラムを構成するようでなければならない。

翻訳用計算機段落中にWITH DEBUGGING MODE句を指定していないと、デバッグ行はすべて注記行とみなされる。

デバッグ行を連続して書いてもよい。デバッグ行を次の行に継続することもできる。ただし、後ろの各行の標識領域にも"D" または "d" を書く。行をまたがって文字列を書くことはできない。

デバッグ行を書くことができるのは、 実行用計算機段落よりも後ろだけである。


注: デバッグ行はANSI中核の一部であり、デバッグ機能単位に含まれるのではない。したがって、デバッグ行は廃要素には指定されておらず、次のANSI標準の全面改訂の際に削除される予定もない。