COBOL プログラムでの TEST または NOTEST コンパイラー・サブオプションの選択

ここでは、デバッグ・シナリオを実現するために指定する必要のある TEST コンパイラー・オプションおよびサブオプションの組み合わせについて説明します。 ここでは、COBOL プログラムを Enterprise COBOL for z/OS® バージョン 3.4 以降 でコンパイルすることを想定していますが、それより古いバージョンの COBOL コンパイラーに使用する代替策についても情報を提供します。

COBOL コンパイラーには、以下のアクションを制御するために、TEST コンパイラー・オプションとそのサブオプションが用意されています。

  • フックおよびシンボル・テーブルの生成および配置。
  • デバッグ情報のオブジェクト・ファイルまたは別のデバッグ・ファイルへの配置。

以下の説明は、プログラムのデバッグに必要な機能を提供する TEST コンパイラー・サブオプションの組み合わせを選択する際に役立ちます。

  1. 使用しているサイトのリソースに留意して、次のリストからデバッグ・シナリオを選択します。
    • シナリオ A: Enterprise COBOL for z/OS、バージョン 4 をコンパイルする場合、TEST (NOHOOK,SEPARATE) を使用することにより、ほとんどの z/OS Debugger 機能と小さなプログラム・サイズを取得できます保護ストレージにロードされたプログラムをデバッグする必要がある場合は、サイトに「許可されたデバッグ」機能が インストールされていることを確認してください。
      OPT(STD) または OPT(FULL) のコンパイラー・オプションを指定してユーザー・プログラムをコンパイルする場合は、TEST コンパイラー・オプションの EJPD サブオプションも指定して、以下の作業を可能にする必要があります。
      • GOTO または JUMPTO コマンドを使用する。
      • 結果を予測可能な形で変数を変更する。
      EJPD サブオプションを使用した場合は、一部の最適化が実現されない可能性があります。

      他のApplication Delivery Foundation for z/OSツールを使用している場合は、IBM® Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイドにある情報を確認して、すべてのApplication Delivery Foundation for z/OSツールで必要となるファイルの作成に必要なコンパイラー・オプションを、すべて指定していることを確認してください。

    • シナリオ B: 以下のいずれかのコンパイラーを使用してコンパイルする場合は、TEST (NONE,SYM,SEPARATE) を使用することにより、ほとんどの z/OS Debugger 機能と小さなプログラム・サイズを取得できます。
      • Enterprise COBOL for z/OS and OS/390® バージョン 3 リリース 2 以降
      • Enterprise COBOL for z/OS and OS/390、バージョン 3 リリース 1 APAR PQ63235 適用
      • COBOL OS/390 & VM、バージョン 2 リリース 2
      • COBOL OS/390 & VM バージョン 2 リリース 1、APAR PQ63234 適用
      保護ストレージにロードされたプログラムをデバッグする必要がある場合は、サイトに「許可されたデバッグ」機能が インストールされていることを確認してください。
      ユーザー・プログラムのコンパイル時に最適化も行って、z/OS Debugger の機能を最大限得られるようにしたい場合は、以下のコンパイラー・オプションの組み合わせのうちのいずれかを指定してコンパイルを行う必要があります。
      • OPT(STD) TEST(NONE,SYM)
      • OPT(STD) TEST(NONE,SYM,SEPARATE)
      • OPT(FULL) TEST(NONE,SYM)
      • OPT(FULL) TEST(NONE,SYM,SEPARATE)
      これらのタイプのプログラムでは、変数を変更することができますが、結果が予測不能になる場合があります。

      他のApplication Delivery Foundation for z/OSツールを使用している場合は、IBM Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイドにある情報を確認して、すべてのApplication Delivery Foundation for z/OSツールで必要となるファイルの作成に必要なコンパイラー・オプションを、すべて指定していることを確認してください。

    • シナリオ C: すべての z/OS Debugger 機能を取得できればプログラム・サイズが大きくなってもかまわず、また、デバッグ情報を分離デバッグ・ファイルに入れる必要がない場合は、以下のコンパイラー・オプションを指定のコンパイラーに使用してコンパイルします。
      • TEST(HOOK,NOSEPARATE) と Enterprise COBOL for z/OS バージョン 4。
      • TEST(ALL,SYM,NOSEPARATE) (以下のいずれかのコンパイラーの場合)
        • Enterprise COBOL for z/OS and OS/390 バージョン 3 リリース 2 以降
        • Enterprise COBOL for z/OS and OS/390、バージョン 3 リリース 1 APAR PQ63235 適用
        • COBOL OS/390 & VM、バージョン 2 リリース 2
        • COBOL OS/390 & VM、バージョン 2 リリース 1、APAR PQ40298 適用

      他のApplication Delivery Foundation for z/OSツールを使用している場合は、IBM Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイドにある情報を確認して、すべてのApplication Delivery Foundation for z/OSツールで必要となるファイルの作成に必要なコンパイラー・オプションを、すべて指定していることを確認してください。

    • シナリオ D: COBOL OS/390 & VM バージョン 2 リリース 1 またはそれ以前のバージョンを使用している場合、すべての z/OS Debugger 機能を使用したいときは TEST(ALL,SYM) を使用します。
      他のApplication Delivery Foundation for z/OSツールを使用している場合は、使用しているコンパイラーに対応する、IBM Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイドのトピックを参照して、すべてのApplication Delivery Foundation for z/OSツールで必要となるファイルの作成に必要なコンパイラー・オプションを、すべて指定していることを確認してください。
      • Enterprise COBOL for z/OS バージョン 3、および COBOL for OS/390 および VM プログラム
      • COBOL for MVS™(tm) および VM プログラム
      • VS COBOL II プログラム
      • OS/VS COBOL プログラム
    • シナリオ E: NOTEST コンパイラー・オプションを指定してコンパイルし、EQALANGX ファイルを生成することにより、ほとんどの z/OS Debugger 機能を取得できます。 その場合は、プログラムを LangX COBOL モードでデバッグする必要があります。
    • シナリオ F: NOTEST コンパイラー・オプションを使用してコンパイルすると、z/OS Debugger 機能をいくつか取得できます。 その場合は、プログラムを逆アセンブリー・モードでデバッグする必要があります。
      他のApplication Delivery Foundation for z/OSツールを使用している場合は、使用しているコンパイラーに対応する、IBM Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイドのトピックを参照して、すべてのApplication Delivery Foundation for z/OSツールで必要となるファイルの作成に必要なコンパイラー・オプションを、すべて指定していることを確認してください。
      • Enterprise COBOL for z/OS バージョン 4 プログラム
      • Enterprise COBOL for z/OS バージョン 3、および COBOL for OS/390 および VM プログラム
      • COBOL for MVS(tm) および VM プログラム
      • VS COBOL II プログラム
      • OS/VS COBOL プログラム
    • シナリオ G: Enterprise COBOL for z/OS バージョン 5 またはバージョン 6 リリース 1 を使用してコンパイルする場合は、TEST (SOURCE) を使用することにより、ほとんどの z/OS Debugger 機能を活用できます。 保護ストレージにロードされたプログラムをデバッグする必要がある場合は、サイトに「許可されたデバッグ」機能が インストールされていることを確認してください。 TEST(SOURCE) コンパイラー・オプションを使用すると、デバッグ・データは NOLOAD デバッグ・セグメント内のプログラム・オブジェクトに保存されます。 デバッグ・データによって、ロード済みプログラムのサイズが増加することはありません。 デバッグ・データは実行可能プログラムと常に一致し、常に使用可能です。このため、データ・セットのリストを検索する必要はありません。 プログラム・オブジェクトのサイズは増加しますが、プログラムのデバッグ時にデバッグ・データをロードする必要がない限り、プログラム・オブジェクトのサイズがメモリー内の占有スペースとなることはありません。
      注: NOLOAD デバッグ・セグメント内のプログラム・オブジェクトにデバッグ・データが保管される TEST コンパイラー・オプションを使用してコンパイルされた、複数の Enterprise COBOL for z/OS バージョン 5 以降のプログラムを含むロード・モジュールをリンク・エディットするときには、バインダー PAGE ステートメントを使用しないでください。
    • シナリオ H: Enterprise COBOL for z/OS バージョン 6 リリース 2 以降でコンパイルする場合は、TEST (SOURCE) または TEST (SEPARATE,SOURCE) を使用することで、z/OS Debuggerのほとんどの機能を取得できます。 Enterprise COBOL for z/OS バージョン 6 リリース 2 (APAR PH04485 インストール済み) 以降の場合、TEST (SEPARATE (DSNAME), SOURCE) を指定することにより、オブジェクト・プログラム内に 分離デバッグ・ファイル 名 (SYSDEBUG DD データ・セット名) を保管できます。 保護ストレージにロードされたプログラムをデバッグする必要がある場合は、サイトに「許可されたデバッグ」機能が インストールされていることを確認してください。
      • TEST(SOURCE) コンパイラー・オプションを使用すると、デバッグ・データは NOLOAD デバッグ・セグメント内のプログラム・オブジェクトに保存されます。 デバッグ・データによって、ロード済みプログラムのサイズが増加することはありません。 デバッグ・データは実行可能プログラムと常に一致し、常に使用可能です。このため、データ・セットのリストを検索する必要はありません。 プログラム・オブジェクトのサイズは増加しますが、プログラムのデバッグ時にデバッグ・データをロードする必要がない限り、プログラム・オブジェクトのサイズがメモリー内の占有スペースとなることはありません。
        注: NOLOAD デバッグ・セグメント内のプログラム・オブジェクトにデバッグ・データが保管される TEST コンパイラー・オプションを使用してコンパイルされた、複数の Enterprise COBOL for z/OS バージョン 5 以降のプログラムを含むロード・モジュールをリンク・エディットするときには、バインダー PAGE ステートメントを使用しないでください。
      • TEST(SEPARATE,SOURCE) コンパイラー・オプションを使用すると、デバッグ・データは別個のデバッグ・ファイルに保管されます。 コンパイラーは、SYSDEBUG DD ステートメントを使用することにより、分離デバッグ・ファイル を指定します。
        • Enterprise COBOL for z/OS バージョン 6 リリース 2 (APAR PH04485 インストール済み) 以降の場合、SEPARATE(DSNAME) を指定することにより、別個のデバッグ・ファイルの名前をプログラム・オブジェクトの中に保管することができます。
        • SEPARATE (DSNAME) を指定しない場合、またはコンパイル後に分離デバッグ・ファイルの場所が変更された場合、以下のいずれかの方法で 分離デバッグ・ファイル の場所を指定してください。z/OS Debugger は、以下の順序で分離デバッグ・ファイルを検索します。
          • SET SOURCE コマンド (分離デバッグ・ファイル の正確な場所を指定する)
          • EQAUEDAT ユーザー出口
          • SET DEFAULT LISTINGS コマンド
          • EQADEBUG DD
          • EQA_DBG_SYSDEBUG 環境変数

          EQAUEDAT ユーザー出口、SET DEFAULT LISTINGS コマンド、EQADEBUG DD 名、または EQA_DBG_SYSDEBUG 環境変数を使用する場合、別個のデバッグ・ファイルの場所として、PDS データ・セットまたは z/OS UNIX システム・サービスのディレクトリーを指定してください。

          SET DEFAULT LISTINGS コマンド、EQADEBUG DD 名、または EQA_DBG_SYSDEBUG 環境変数を使用する場合、かつファイル名が CU 名と一致しないために 分離デバッグ・ファイル が見つからない場合、z/OS Debugger は、一致するデバッグ・ファイルを検索するため、同じ方法で指定されたデータ・セットを徹底的に探索します。 徹底的な検索は遅い場合があります。

  2. IMS を使用する COBOL プログラムの場合は、IMS RESLIB ライブラリーから IMS インターフェース・モジュール DFSLI000 を組み込んでください。
  3. シナリオ A、B、および E の場合、以下のステップを実行します。
    1. Dynamic Debug機能を使用して、読み取り専用ストレージ内にあるプログラムにフックを配置する場合は、「許可されたデバッグ」機能がインストールされており、それを使用する許可を受けていることをシステム管理者に確認します。
    2. z/OS Debugger の始動後に、QUERY DYNDEBUG コマンドを入力して、Dynamic Debug 機能を非アクティブ化していないことを確認する。
    3. 分離デバッグ・ファイルが非一時ファイルで、デバッグ・セッション中に 使用可能であることを確認する。 リストは保存する必要はありません。
  4. 次の作業を行う必要があるかどうかを確認する。
    • TEST とともに NUMBER を指定する場合には、ソース・コード内のすべての順序フィールドに数字が入っていることを 確認してください。
    • 以下のアクションを実行するには、TEST コンパイラー・オプションの SYM サブオプションを指定する必要があります。
      • GOTO コマンドのターゲットとしてラベル (パラグラフ名またはセクション名) を指定する。
      • 名前でプログラム変数を参照する。
      • LIST または DESCRIBE のようなコマンドで、変数または式にアクセスする。
      • PLAYBACK ENABLE コマンドの DATA サブオプションを使用する。
      これらのアクションを実行するために SYM サブオプションを指定する必要があるのは、以下のいずれかのコンパイラーを使用してコンパイルする場合だけです。
      • Enterprise COBOL for z/OS and OS/390 バージョン 3 のすべてのリリース
      • COBOL OS/390 & VM バージョン 2 のすべてのリリース
    • TEST コンパイラー・オプションと DEBUG ランタイム・オプションは、互いに排他的な関係にあり、DEBUG が優先します。 SOURCE-COMPUTER 段落に WITH DEBUGGING MODE 文節を指定して、コード内に USE FOR DEBUGGING ステートメントを指定した場合、TEST は使用不能になります。 TEST コンパイラー・オプションは、オプション・リストには表示されますが、矛盾が生じたために TEST が無効であることを知らせる診断メッセージが出されます。
    • VS COBOL II プログラムの場合、TEST コンパイラー・オプションを使用するには、 以下を指定する必要があります。
      • SOURCE コンパイラー・オプション。 このオプションは、リスト・ファイルを生成して userid.pgmname.list のロケーションに保存するために必要です。
      • RESIDENT コンパイラー・オプション。 このオプションは、必要な z/OS Debugger ルーチンが実行時に動的にロードされるか確認するために、Language Environment® が必要とするものです。

      さらに、ユーザー・プログラムを、VS COBOL II COB2LIB ライブラリーではなく、言語環境プログラム SCEELKED ライブラリーとリンクさせなければなりません。

コンパイラー・オプションおよびサブオプションの選択後に、デバッグ・セッションの計画を参照して、次に完了する必要のある作業を決定してください。

このトピックで説明している内容に関して詳しくは、以降のトピックを参照してください。

  • 関連する参照項目
  • Enterprise COBOL for z/OS プログラミング・ガイドTEST コンパイラー・オプションの説明。

以下の表は、NOTEST コンパイラー・オプション、TEST コンパイラー・オプション、および TEST コンパイラー・オプションの一部のサブオプションが z/OS Debugger の動作、または「Enterprise COBOL for z/OS プログラミング・ガイド」で説明されていない機能の可用性に及ぼす影響を説明しています。

表 1. COBOL NOTEST コンパイラー・オプションおよび TEST コンパイラー・サブオプションの一部が z/OS Debugger に及ぼす影響の説明
コンパイラー・オプションまたはサブオプションの名前 影響の説明
NOTEST
  • プログラム・ステートメントをステップスルーすることはできません。
  • プログラムの実行を停止できるのは、メイン・コンパイル単位の初期化時のみです。
  • プログラムに CEETEST への呼び出しを組み込んで、プログラムの実行を停止し、z/OS Debugger コマンドを発行することができます。
  • プログラム変数を検証または使用することはできません。
  • ストレージおよびレジスターをリストできます。
  • コンパイラーによって作成されたソース・リストは使用できません。したがって、デバッグ・セッション中はリストを使用できません。 SET DEFAULT LISTINGS コマンドを使用しても、リストは使用できません。
  • ステートメント・テーブルが使用できないため、ステートメントのブレークポイントの設定や、GOTO または QUERY LOCATION などのコマンドの使用はできません。
ただし、引き続き「逆アセンブル」ビューを使用して、プログラムをデバッグすることができます。 「逆アセンブル」ビューの使用方法については、逆アセンブル・プログラムのデバッグを参照してください。
NONE および NOHOOK
  • 以下のいずれかのコンパイラーを使用する場合、最適化されていないプログラムをデバッグするときに、GOTO コマンドまたは JUMPTO コマンドを使用できます。
    • Enterprise COBOL for z/OS バージョン 4
    • Enterprise COBOL for z/OS and OS/390 バージョン 3 のすべてのリリース
    • COBOL for OS/390 & VM、バージョン 2 のすべてのリリース

    Enterprise COBOL for z/OS バージョン 4.1 を使用してプログラムをコンパイルする場合、最適化されたプログラムをデバッグするときに、GOTO コマンドまたは JUMPTO コマンドを使用できます。 GOTO コマンドまたは JUMPTO コマンドを有効にするには、TEST オプションの EJPD サブオプションを指定する必要があります。 EJPD サブオプションを指定した場合、一部の最適化が失われる可能性があります。

    TEST コンパイラー・オプションの NOEJPD サブオプションを指定してコンパイルする場合、SET WARNING OFF 設定を使用すると、GOTO および JUMPTO のサポートが制限されます。 GOTO および JUMPTO が有効になりません。

  • 任意の場所で CEETEST への呼び出しを使用して、z/OS Debugger を始動できます。
  • Enterprise COBOL for z/OS バージョン 5 で NONE および NOHOOK を使用することはできませんが、 このコンパイラーで TEST コンパイル・オプションを指定すると、前のコンパイラーで NONE および NOHOOK を指定した場合に似たオブジェクトが作成されます。
EJPD
以下のコンパイラーのいずれかを使用してコンパイルされた最適化プログラムでは、変数を変更することができます。
  • Enterprise COBOL for z/OS バージョン 5
  • Enterprise COBOL for z/OS バージョン 4
  • Enterprise COBOL for z/OS and OS/390 バージョン 3 リリース 2 以降
  • Enterprise COBOL for z/OS and OS/390 バージョン 3 リリース 1 (APAR PQ63235 インストール済み)
  • COBOL OS/390 & VM、バージョン 2 リリース 2
  • COBOL OS/390 & VM バージョン 2 リリース 1 (APAR PQ63234 インストール済み)
ただし、結果は予測不能である場合があります。 より予測可能な結果を得るには、プログラムを Enterprise COBOL for z/OS、バージョン 4 および 5 でコンパイルし、TEST コンパイラー・オプションの EJPD サブオプションを指定します。 ただし、初期設定するために VALUE 文節を指定して宣言された変数は、変更できません。
LOUD
LOUD パラメーターの使用を推奨しますが、このパラメーターはオプションです。 このパラメーターを指定した場合、 追加の通知メッセージと統計メッセージが表示されます。
NOSYM
  • プログラム変数を名前で参照できません。
  • LISTDESCRIBE などのコマンドを使用して変数や式にアクセスすることはできません。
  • CALL 変数などのコマンドを使用して別のプログラムに分岐したり、GOTO コマンドを使用して別のラベル (パラグラフまたはセクション名) に分岐したりすることはできません。

Enterprise COBOL for z/OS バージョン 4 でコンパイルする場合、コンパイラーは SYM または NOSYM を無視し、常にシンボル・テーブルを作成します。

Enterprise COBOL for z/OS バージョン 5 では、このオプションを使用できません。

STMT
  • COBOL コンパイラーは、DATEPROC コンパイラー・オプションが指定された場合にのみ、日付処理ステートメント用にコンパイル時に挿入するフックを生成します。 日付処理ステートメントは、日付フィールドを参照するステートメント、すなわち、日付フィールドを参照 する EVALUATE または SEARCH ステートメントの WHEN 句です。
  • すべてのステートメントにブレークポイントを設定し、プログラムをステップスルーできます。
  • パス点がステートメントの境界でもある場合を除き、z/OS Debugger がパス点で制御を得ることはできません。
  • z/OS Debugger コマンド GOTO を使用して、すべてのステートメントおよびラベルに分岐することができます。

Enterprise COBOL for z/OS、バージョン 4 でコンパイルする場合、コンパイラーは STMT サブオプションを HOOK サブオプション (このサブオプションは、Enterprise COBOL for z/OS and OS/390、バージョン 3、または COBOL for OS/390 & VM、バージョン 2 の全てのリリースにおける ALL サブオプションに相当します) であるかのように取り扱います。

Enterprise COBOL for z/OS バージョン 5 では、このオプションを使用できません。

PATH
  • z/OS Debugger は、パス点と、ブロックの入り口点、および出口点でのみ制御を得ることができます。 プログラムをステップスルーしようとすると、z/OS Debugger はパス点と一致するステートメントでのみ制御を得るため、一部のステートメントは実行されないように見えます。
  • 任意の場所で CEETEST への呼び出しを使用して、z/OS Debugger を始動できます。
  • z/OS Debugger コマンド GOTO は、パス点と一致するすべてのステートメントおよびラベルに対して有効です。

Enterprise COBOL for z/OS、バージョン 4でコンパイルする場合、コンパイラーは PATH サブオプションを HOOK サブオプション (このサブオプションは、Enterprise COBOL for z/OS and OS/390、バージョン 3、または COBOL for OS/390 & VM、バージョン 2 の全てのリリースにおける ALL サブオプションに相当します) であるかのように扱います。

Enterprise COBOL for z/OS バージョン 5 では、このオプションを使用できません。

BLOCK
  • z/OS Debugger は、ユーザー・プログラム、メソッド、およびネストされたプログラムの入り口と出口で制御を得ます。
  • CEETEST への呼び出しを使用して、z/OS Debugger を任意の場所で明示的に始動できます。
  • STEP などのコマンドを発行すると、次の入り口点または出口点に達するまでプログラムが実行されます。
  • GOTO コマンドを使用すると、ブロックの入り口点または出口点と一致するステートメントへの分岐ができます。

Enterprise COBOL for z/OS、バージョン 4 をコンパイルする場合、コンパイラーは BLOCK サブオプションを HOOK サブオプション (このサブオプションは、Enterprise COBOL for z/OS and OS/390 バージョン 3、または COBOL for OS/390 & VM、バージョン 2 のすべてのリリースの ALL サブオプションに相当します) であるかのように取り扱います。

Enterprise COBOL for z/OS バージョン 5 では、このオプションを使用できません。

ALL
  • すべてのステートメントおよびパス点にブレークポイントを設定し、プログラムをステップスルーできます。
  • z/OS Debugger は、すべてのステートメント、パス点、日付処理ステートメント、ラベル、ブロックの入り口点および出口点でプログラムの制御を得ることができ、ユーザーは z/OS Debugger コマンドの入力が可能になります。
  • z/OS Debugger コマンド GOTO を使用して、ステートメントおよびラベルに分岐することができます。

Enterprise COBOL for z/OS、バージョン 4 をコンパイルする場合、コンパイラーは ALL サブオプションを HOOK サブオプション (このサブオプションは、Enterprise COBOL for z/OS and OS/390、バージョン 3、または COBOL for OS/390 & VM、バージョン 2 の全てのリリースにおける ALL サブオプションに相当します) であるかのように取り扱います。

このオプションを Enterprise COBOL for z/OS バージョン 5 で使用することはできませんが、このコンパイラーで TEST コンパイル・オプションを指定した場合、コンパイル時に挿入されるフックを使用できる限り、ALL を指定した場合に似たオブジェクトが作成されます。