このセクションでは、複雑なアプリケーションをデバッグしようとする時に遭遇する可能性のあるいくつかの問題と、考えられる各解決策を記載してあります。
Debug Tool は、バインダー API を使用して、プログラムに関するメモリー内の情報を取得します。バインダー API は、ロード・モジュールまたはプログラム・オブジェクトが入っているデータ・セットに保管されている情報にアクセスする必要があります。z/OS は、通常、Debug Tool がバインダー API に渡せるようにプログラムのロード元のデータ・セットの名前を Debug Tool に与えることができます。しかし、z/OS は、LLA からロードされたプログラムについては、この情報を持っていません。
Debug Tool は、LLA からロードされたプログラムをデバッグしようとするときに、以下のステップを実行します。
以下に示す制約が適用されます。
Debug Tool は、特定の接頭部で始まるロード・モジュール名とコンパイル単位名はシステム・コンポーネントであると想定します。例えば、EQAxxxxx は Debug Tool モジュール、CEExxxxx は言語環境プログラムのモジュール、および IGZxxxxx は COBOL モジュールです。
Debug Tool は、これらの接頭部が付いたロード・モジュールまたはコンパイル単位をデバッグしようとしません。その理由は以下のとおりです。
ユーザーのロード・モジュールまたはコンパイル単位の名前を付ける場合にシステム接頭部のいずれかと競合する接頭部にした場合は、このセクションに記載された NAMES INCLUDE コマンドおよびその説明を使ってそのロード・モジュールまたはコンパイル単位をデバッグできます。
Debug Tool がシステム接頭部として認識している接頭部一覧を表示できます。これを行うには以下のコマンドを使用します。
NAMES DISPLAY ALL EXCLUDED LOADMODS; NAMES DISPLAY ALL EXCLUDED CUS;
上記のコマンドはユーザー要求 (NAMES EXCLUDE コマンドを使用して) で現在実行されている名前一覧を表示します。その後ろに Debug Tool が除外する名前一覧を表示するセクションが続きます。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
Debug Tool が除外対象とする接頭部のいずれかでお客様のプログラム名が始まる場合、NAMES INCLUDE コマンドを使用してこのプログラムがユーザーのロード・モジュールまたはコンパイル単位であって、システム・プログラムでないことを Debug Tool に示します。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
一部のプログラムには、実行可能コードが入っていないロード・モジュールまたはコンパイル単位が含まれています。 これらのモジュールはデータしか入っていないプログラムとして認識されます。このようなモジュールはアセンブラー・プログラムでは一般的です。状態によっては、Debug Tool はこのようなモジュールには実行可能な命令が入っていないと認識せず、ブレークポイントを設定しようする場合があります。このことは、これらのモジュールの内容をオーバーレイすることを意味します。
このような場合は、NAMES EXCLUDE コマンドを使用して、これらのモジュールが実行可能コードのない、データしか入っていないモジュールである旨、Debug Tool に示すことができます。それにより、Debug Tool はデータしか入っていないモジュールの中にブレークポイントを設定しようとしません。実行可能コードが入ったモジュールを除外するために NAMES EXCLUDE コマンドを使用すると、そのモジュールが依然として Debug Tool 内に現れる可能性があり、Debug Tool は依然としてこれらのモジュール内にブレークポイントを設定しようとする可能性があります。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
一部の非常に大きなアプリケーションには、デバッグ不要の多数のロード・モジュールまたはコンパイル単位が含まれている可能性があります。一部のケースでは、これらのロード・モジュールまたはコンパイル単位に対するデバッグ・データの作成と操作により、大量のメモリー、CPU 時間、およびその他のリソースが消費される可能性があります。
NAMES EXCLUDE コマンドを使用して、このようなモジュールに対するデバッグ・データの維持が不要である旨、Debug Tool に示すことができます。NAMES EXCLUDE コマンドを使用して実行可能モジュールを除外する場合、Debug Tool が除外されるモジュールのデバッグ・データを必要とすることもあります。次のリストは、そうした可能性がある状態のいくつかを述べたものですが、これがすべてではありません。
また、据え置き AT ENTRY コマンドを入力した場合、Debug Tool は据え置き AT ENTRY のターゲットであるロード・モジュールおよびコンパイル単位について、暗黙の NAMES INCLUDE コマンドを生成します。その後、それらの名前がプログラム内に現れると、Debug Tool は前の NAMES EXCLUDE コマンドでそれらの名前が指定されていても、それらを除外しません。
上記のすべての状態で、Debug Tool はデバッグ・データを必要に応じてロードし、それらのモジュールが Debug Tool に認識される場合があります。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
NAMES DISPLAY コマンドを使用して、NAMES コマンドの現行設定を表示できます。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
Debug Tool が既に認識しているロード・モジュールまたはコンパイル単位に関して、NAMES コマンドを使用できません。このため、NAMES コマンドを使用して、初期ロード・モジュール、または初期ロード・モジュールに含まれるコンパイル単位を包含または除外したい旨、Debug Tool に示すことはできません。 これを行いたい場合は、NAMES コマンド相当の EQAOPTS Debug Tool カスタマイズ・モジュールに制御ステートメントをコーディングする必要があります。
EQAOPTS を使用すると、特定の Debug Tool 機能をカスタマイズ可能になります。 EQAOPTS の説明の詳細は「Debug Tool カスタマイズ・ガイド」を参照してください。EQAOPTS を生成するには EQAXOPT アセンブラー・マクロを呼び出します。 NAMES コマンドを処理するために、EQAXOPT アセンブラー・マクロを以下の形式でコーディングします。
EQAXOPT NAMES,positional_parameter_2,positional_paremeter_3,positional_parameter_4
このマクロでは、2 番目、3 番目、4 番目の定位置パラメーターを、対応する NAMES コマンド内の各フィールドのようにコーディングします。下表には、Debug Tool コマンドをコーディングして EQAXOPT マクロと同等にする方法を記載してあります。
| Debug Tool コマンド | EQAXOPT マクロ呼び出し |
|---|---|
| NAMES EXCLUDE CU "ABC1*"; | EQAXOPT NAMES,EXCLUDE,CU,ABC1* |
NAMES オプション指定の EQAXOPT マクロを、単一の EQAOPTS 内で必要なだけ呼び出すことができます。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。