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

このトピックでは、使用可能なデバッグ・シナリオと、正しい TEST コンパイラー・サブオプションを選択して特定のデバッグ・シナリオを作成する方法について説明します。

C コンパイラーは、TEST コンパイラー・オプションとそのサブオプションを提供して、フックとシンボル・テーブルの生成と配置を制御します。

z/OS® Debugger は、最適化された C プログラムのデバッグをサポートしません。 NOOPTIMIZE 以外のコンパイラー・オプションは使用しないでください。

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

  1. 使用しているサイトのリソースに留意して、次のリストからデバッグ・シナリオを選択します。
    • シナリオ A: すべての z/OS Debugger 機能を取得できれば、(DEBUG(FORMAT(DWARF)) を使用した場合と比べて) プログラム・サイズが大きくなってもかまわない場合は、TEST(ALL,HOOK,SYMBOL) を使用します。
    • シナリオ B: NOTEST コンパイラー・オプションを指定してコンパイルすると、一部の z/OS Debugger 機能を取得できます。 その場合は、プログラムを逆アセンブリー・モードでデバッグする必要があります。
    • シナリオ C: ALCS で実行されているプログラムをデバッグする場合は、TEST コンパイラー・オプションの HOOK サブオプションを使用してコンパイルする必要があります。

    どのシナリオの場合も、他の Application Delivery Foundation for z/OS ツールを使用している場合、IBM® Application Delivery Foundation for z/OS Common Components カスタマイズ・ガイドおよびユーザー・ガイド のトピック『z/OS XL C および C++ プログラム』を参照して、すべての Application Delivery Foundation for z/OS ツールで必要となるファイルの作成に必要なコンパイラー・オプションをすべて指定していることを確認してください。

  2. シナリオ B の場合、次の手順を行います。
    1. z/OS バージョン 1.6 またはバージョン 1.7 で実行している場合は、Language Environment®の APAR PK12833 用の PTF がインストールされていることを確認します。
    2. Dynamic Debug機能を使用して、読み取り専用ストレージ内にあるプログラムにフックを配置する場合は、「許可されたデバッグ」機能がインストールされており、それを使用する許可を受けていることをシステム管理者に確認します。
    3. z/OS Debugger の始動後に、SET DYNDEBUG OFF コマンドを入力して、Dynamic Debug 機能を非アクティブ化していないことを確認します。
  3. 次の作業を行う必要があるかどうかを確認する。
    • プログラムをコンパイルする場合は、SYSIN をインストリーム・データ・セットに関連付けないでください (例えば、//SYSIN DD *)。z/OS Debugger は、デバッグするプログラムのソースを見つけるために永続データ・セットにアクセスする必要があります。

    • #pragma ステートメントを使用して TEST または NOTEST コンパイラー・オプションを指定する場合は、#pragma ステートメントによる C プログラムのコンパイル を参照してください。
    • C TEST コンパイラー・オプションは、 GONUMBER コンパイラー・オプションを暗黙的に指定します。これにより、コンパイラーは、入力ソース・ファイルに対応する行番号テーブルを生成します。 NOGONUMBER を指定することにより、このオプションを明示的に除去することができます。 TEST オプションと NOGONUMBER オプションを一緒に指定すると、コードをステップスルーする際に z/OS Debugger は現在の実行行を表示しません。
    • TEST コンパイラー・オプションと、OPT(1) または OPT(2) コンパイラー・オプションのどちらかを指定してコンパイルされたプログラムは、指定された TEST サブオプションに関係なく、行、ブロック、およびパス点にフックを持つことも、シンボル・テーブルを生成することもありません。 最適化プログラムには、関数の入り口点と出口点のフックだけが生成されます。
    • TEST サブオプションは、矛盾するサブオプション (例えば、PATHNOPATH の両方) を含めて、いくつでも指定できます。 この場合、最後に指定されたサブオプションが有効となります。 例えば、TEST(BLOCK, NOBLOCK, BLOCK, NOLINE, LINE) を指定すると、有効になるのは TEST(BLOCK, LINE) です。これは、BLOCKLINE が最後に指定されているためです。
    • 類似した 2 つの TEST サブオプションが指定されていても、重複フックが生成されることはありません。 例えば、TEST(BLOCK, PATH) を指定した場合、BLOCK サブオプションによって、入り口点および出口点にフックが生成されます。 PATH サブオプションも、入り口点と出口点にフックを生成するサブオプションです。 しかし、それぞれの入り口点と出口点では、1 つのフックしか生成されません。
表 1. C の NOTEST コンパイラー・オプションおよび TEST コンパイラー・サブオプションが z/OS Debugger に及ぼす影響の説明
コンパイラー・オプションまたはサブオプションの名前 影響の説明
NOTEST

以下のリストは、NOTEST コンパイラー・オプションが z/OS Debugger の動作、または「z/OS XL C/C++ ユーザーズ・ガイド」で説明されていないフィーチャーの可用性に及ぼす影響を説明したものです。

  • プログラム・ステートメントをステップスルーすることはできません。 プログラムの実行を停止できるのは、メイン・コンパイル単位の初期化時のみです。
  • プログラム変数を検証または使用することはできません。
  • ストレージおよびレジスターをリストできます。
  • z/OS Debugger コマンド GOTO は使用できません。
ただし、引き続き「逆アセンブル」ビューを使用して、プログラムをデバッグすることができます。 「逆アセンブル」ビューの使用方法については、逆アセンブル・プログラムのデバッグを参照してください。
TEST

以下のリストは、TEST コンパイラー・オプションの一部のサブオプションが z/OS Debugger の動作、または「z/OS XL C/C++ ユーザーズ・ガイド」で説明されていないフィーチャーの可用性に及ぼす影響を説明したものです。

  • 1 つのソース・ファイルの最大行数が 131,072 を越えてはいけない。
  • 実行可能ステートメントを保管する組み込みファイルの最大数が 1024 を越えてはいけない。
NOSYM

以下のリストは、TEST コンパイラー・オプションの NOSYM サブオプションが z/OS Debugger の動作、または z/OS XL C/C++ ユーザーズ・ガイド で説明されていないフィーチャーの可用性に及ぼす影響を説明したものです。

  • プログラム変数を名前で参照できません。
  • LISTDESCRIBE などのコマンドを使用して変数や式にアクセスすることはできません。
  • CALLGOTO などのコマンドを使用して別のラベル (パラグラフまたはセクション名) に分岐することはできません。

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

  • 関連参照
  • z/OS XL C/C++ ユーザーズ・ガイド での TEST コンパイラー・オプションの説明