このセクションでは、複雑なアプリケーションをデバッグしようとする時に遭遇する可能性のあるいくつかの問題と、考えられる各解決策を記載してあります。
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 は依然としてそのモジュール内にブレークポイントを設定しようとする可能性があります。
このトピックで説明している内容に関して詳しくは、以降のトピックを参照してください。
Debug Tool は、TEST コンパイラー・オプションまたは DEBUG コンパイラー・オプションを使用してコンパイルされたコンパイル単位のデバッグ・データを暗黙的にロードするために設計されました。ただし、一部の大規模アプリケーションには、デバッグ不要の大量のロード・モジュールまたはコンパイル単位が入っている可能性があります。一部のケースでは、これらのロード・モジュールまたはコンパイル単位に対するデバッグ・データの作成と操作により、大量のメモリー、CPU 時間、およびその他のリソースが消費される可能性があります。
この状態は、次の方法のいずれかで処理できます。
Debug Tool は、デフォルトでは、TEST コンパイラー・オプションまたは DEBUG コンパイラー・オプションを使用してコンパイルされた高水準言語のコンパイル単位を検出するたびにデバッグ・データを自動的にロードします。多くの場合、デバッグするロード・モジュールとコンパイル単位を事前に決定する必要がないため、これは最も便利な操作モードです。ただし、一部の複雑なアプリケーションでは、このデータの操作により、パフォーマンスに重大な影響を与える可能性があります。このような場合は、明示デバッグ・モードを使用して、デバッグするように指定したコンパイル単位のみのデバッグ・データをロードすることができます。
明示デバッグ・モードを使用可能にするには、SET EXPLICITDEBUG ON コマンドを入力するか、EQAOPTS EXPLICITDEBUG コマンドを指定します。デフォルトでは、このモードは OFF です。明示デバッグ・モードでは、LOADDEBUGDATA (LDD) コマンドを使用して、Debug Tool でデバッグするコンパイル単位のデバッグ・データをロードする必要があります (以降に記載されている状況を除く)。
ほとんどの場合、明示デバッグ・モードを使用可能にする SET EXPLICTDEBUG コマンドを使用できますが、EQAOPTS EXPLICITDEBUG コマンドを使用しなければならない場合もあります。Debug Tool は初期ロード・モジュールとそれに含まれるすべてのコンパイル単位を処理するまでコマンドを処理しないため、Debug Tool で初期ロード・モジュールのコンパイル単位のデバッグ・データをロードしないようにする場合は、EQAOPTS EXPLICITDEBUG コマンドを使用します。
明示デバッグ・モードがアクティブな場合、Debug Tool は以下の場合のみデバッグ・データをロードします。
Debug Tool は、明示デバッグ・モードでは SET DISASSEMBLY ON コマンドをサポートしていません。明示デバッグ・モードがアクティブな場合、Debug Tool は SET DISASSEMBLY OFF を強制的に設定し、ユーザーは明示デバッグ・モードではこの設定を ON に戻すことはできません。
特定のロード・モジュールやコンパイル単位をデバッグしたくない場合があります。このような場合は、これらのロード・モジュールやコンパイル単位のデバッグ・データをロードしないように Debug Tool に通知してパフォーマンスを向上させることができます。
NAMES EXCLUDE コマンドを使用して、このようなモジュールに対するデバッグ・データの維持が不要である旨、Debug Tool に示すことができます。NAMES EXCLUDE コマンドを使用して実行可能モジュールを除外する場合、 Debug Tool が実行可能モジュールのデバッグ・データを必要とする場合があります。次のリストで、包括的ではありませんが、考えられる場合を説明します。
また、据え置かれた AT ENTRY コマンドを入力した場合、Debug Tool は、ロード・モジュールと据え置かれた AT ENTRY のターゲットであるコンパイル単位に、暗黙的な NAMES INCLUDE コマンドを生成します。これらの名前がプログラムの後の方で現れた場合、前の NAMES EXCLUDE コマンドでその名前を指定していても Debug Tool は除外しません。
上記のすべての場合で、Debug Tool は必要に応じてデバッグ・データをロードします。これらのモジュールは Debug Tool に認識させることができます。
このトピックで説明している内容に関して詳しくは、以降のトピックを参照してください。
NAMES コマンドの現在の設定を表示するには、NAMES DISPLAY コマンドを使用します。
このトピックで説明している内容に関して詳しくは、以降のトピックを参照してください。
Debug Tool が既に認識しているロード・モジュールまたはコンパイル単位に関して、NAMES コマンドを使用できません。このため、NAMES コマンドを使用して、初期ロード・モジュール、または初期ロード・モジュールに含まれるコンパイル単位を包含または除外したい旨、Debug Tool に示すことはできません。 これを行う場合は、EQAOPTS NAMES コマンドを実行時または EQAOPTS ロード・モジュールを使用して指定する必要があります。EQAOPTS コマンドの指定方法については、「Debug Tool リファレンスおよびメッセージ」または「Debug Tool カスタマイズ・ガイド」の『EQAOPTS コマンド』トピックを参照してください。
このトピックで説明している内容に関して詳しくは、以降のトピックを参照してください。