EGL デバッガー

ワークベンチで作業している場合、EGL デバッガーによって、最初に出力を生成する必要なく、EGL コードをデバッグすることができます。これらのカテゴリーが有効になります。
J2EE コンテキストでデプロイする対象のバッチ・プログラム上で作業している場合、 起動構成を使用して、J2EE 以外のコンテキストのプログラムをデバッグすることができます。 セットアップは簡単になりますが、以下のいくつかの値を調整する必要があります。

これ以降のセクションでは、ビルド記述子および EGL 設定の相互作用について説明します。

デバッガー・モード

デバッガーには、Java と COBOL の 2 つのモードがあります。これらは、 ビルド記述子オプション system によって判別されます。ビルド記述子が使用されていない場合、またはシステム・タイプをデバッグ設定としての DEBUG に設定する場合、モードは Java です。

モードは、EGL ランタイム振る舞いが Java と COBOL 出力によって異なる環境におけるデバッガーの機能を制御します。

デバッガー・コマンド

EGL デバッガーと相互作用するには、以下のコマンドを使用します。
ブレークポイントを追加
処理が休止する行を識別します。コード実行が休止する場合は、 可変値とともにファイルおよび画面の状況を調べることができます。

ブレークポイントは、 除去されない限り、デバッグ・セッションから次のデバッグ・セッションに渡って記憶されます。

ブレークポイントを、ブランク行またはコメント行に設定することはできません。

ブレークポイントを使用不可にする
ブレークポイントを、非活動化しますが除去はしません。
ブレークポイントを使用可能にする
以前に使用不可にされたブレークポイントを活動化します。
ブレークポイントを除去
処理が行で自動的に休止しないように、ブレークポイントをクリアします。
Remove all breakpoints (すべてのブレークポイントを除去)
すべてのブレークポイントをクリアします。
実行
コードの実行を、次のブレークポイントまで、または実行単位が終了するまで行います。(いずれにしても、デバッガーは main 関数の最初の文で停止します。)
指定行まで実行
すべての文を、指定した行の文まで (その文は含まない) 実行します。
ステップイントゥ
次の EGL 文を実行して、休止します。
以下に、 特定の文タイプに step into コマンドを実行した場合の動作をリストします。
call
呼び出し先プログラムが EGL デバッガー内部で実行中の場合は、呼び出し先プログラムの最初の文で停止します。呼び出し先プログラムが EGL デバッガー外部で実行中の場合は、現在のプログラムの次の文で停止します。

EGL デバッガーはワークベンチ内のすべてのプロジェクト内で受信プログラムを検索します。

converse
ユーザー入力を待ちます。この入力によって、バリデーター関数に含まれる可能性のある次の実行中文で処理が停止します。
forward
コードがページ・ハンドラーに転送されると、デバッガーはユーザー入力を待ち、バリデーター関数に含まれる可能性のある次の実行中文で停止します。

コードがプログラムに転送されると、 デバッガーはそのプログラム内の最初の文で停止します。

function invocation
関数の最初の文で停止します。
JavaLib.invoke およびそれに関連した関数
次のJava 文で停止するため、Java アクセス機能によって使用可能にされた Java コードをデバッグできます。
show、transfer
制御を受け取るプログラムの最初の文で停止します。ターゲット・プログラムは、 EGL デバッガーで稼働する EGL ソースであり、EGL 生成コードではありません。
transfer to a transaction 書式の show 文または transfer 文のいずれかの後、 EGL デバッガーは新規プログラム用のビルド記述子に切り替えるか、または (ビルド記述子が使用されていない場合は) 新規ビルド記述子の作成プロンプトを出します。 新規プログラムは、以前に実行されたプログラムとは異なるプロパティー・セットを持つことができます。EGL デバッガーの振る舞いは、以下のデバッガー・モードによって異なります。
  • Java モードでは、EGL デバッガーは新規プログラム用のビルド記述子に切り替えるか、または (ビルド記述子が使用されていない場合は) 新規ビルド記述子の作成プロンプトを出します。 新規プログラムは、以前に実行されたプログラムとは異なるプロパティー・セットを持つことができます。
  • COBOL モードでは、以前のプログラムのビルド記述子が使用中のまま残され、新規プログラムは異なるプロパティー・セットを持つことができません。

EGL デバッガーはワークベンチ内のすべてのプロジェクト内で受信プログラムを検索します。

ステップオーバー
次の EGL 文を実行して休止しますが、現行の関数から呼び出された関数の内部では停止しません。
以下に、特定の文タイプに step over コマンドを実行した場合の動作をリストします。
converse
ユーザー入力を待ってから、検証機能をスキップします (ブレークポイントが有効でない場合)。converse 文の後の文で停止します。
forward
コードがページ・ハンドラーに転送されると、デバッガーはユーザー入力を待ち、次の実行中文で停止しますが、これはバリデーター関数には含まれません (ブレークポイントが有効でない場合)。

コードがプログラムに転送されると、 デバッガーはそのプログラム内の最初の文で停止します。

show、transfer
制御を受け取るプログラムの最初の文で停止します。ターゲット・プログラムは、 EGL デバッガーで稼働する EGL ソースであり、EGL 生成コードではありません。
transfer to a transaction 書式の show 文または transfer 文のいずれかの後、 EGL デバッガーは新規プログラム用のビルド記述子に切り替えるか、または (ビルド記述子が使用されていない場合は) 新規ビルド記述子の作成プロンプトを出します。 新規プログラムは、以前に実行されたプログラムとは異なるプロパティー・セットを持つことができます。EGL デバッガーの振る舞いは、以下のデバッガー・モードによって異なります。
  • Java モードでは、EGL デバッガーは新規プログラム用のビルド記述子に切り替えるか、または (ビルド記述子が使用されていない場合は) 新規ビルド記述子の作成プロンプトを出します。 新規プログラムは、以前に実行されたプログラムとは異なるプロパティー・セットを持つことができます。
  • COBOL モードでは、以前のプログラムのビルド記述子が使用中のまま残され、新規プログラムは異なるプロパティー・セットを持つことができません。

EGL デバッガーはワークベンチ内のすべてのプロジェクト内で受信プログラムを検索します。

ステップ・リターン
呼び出し側プログラムまたは関数に戻る必要のある文を実行します。それから、そのプログラムまたは関数内の制御を受け取る文で休止します。

バリデーター関数で step return コマンドを実行する場合、例外が有効になります。その場合、振る舞いは step into コマンドの振る舞いと同一になります。つまり、主に EGL デバッガーが次の文を実行して休止することを意味します。

EGL デバッガーは、以下の EGL 文を NULL 演算子であるかのように扱います。
  • sysLib.audit
  • sysLib.purge
  • sysLib.startTransaction

例えば、これらの文にブレークポイントを追加できますが、step into コマンドは後続の文に続けて実行されるだけで、他の文は影響を受けません。

最後に、関数で実行されている最後の文に step into または step over のコマンドを実行する (および、その文が returnexit program、または exit stack でない) と、関数にローカルな変数を検討できるように、処理は関数内で自ら休止します。この場合、デバッグ・セッションを継続するには、別のコマンドを実行します。

ビルド記述子の使用

ビルド記述子を使用すると、デバッグ環境のアスペクトを判別できます。 EGL デバッガーは、以下の規則に従ったビルド記述子を選択します。
  • デバッグ・ビルド記述子をプログラムまたはページ・ハンドラーに指定した場合、EGL デバッガーはそのビルド記述子を使用します。デバッグ・ビルド記述子の設定方法についての詳細は、 『デフォルトのビルド記述子の設定』を参照してください。
  • デバッグ・ビルド記述子を指定しなかった場合、EGL デバッガーは、ビルド記述子のリストから選択するか、または値 None を受け入れることを促すプロンプトを出します。 値 None を受け入れると、EGL デバッガーはデバッグ・セッションで使用するためのビルド記述子を構成します。VisualAge® Generator との互換性が有効であるかどうかは、設定によって決まります。
  • None またはいくつかのデータベース接続情報が不足しているビルド記述子のいずれかを指定した場合、EGL デバッガーは設定を検討することによって接続情報を入手します。これらの設定方法についての詳細は、 『SQL データベース接続設定の変更』を参照してください。

Java 環境において、テキスト・アプリケーションまたはバッチ・アプリケーションでの使用が意図されたプログラムをデバッグする場合、およびそのプログラムが Java 環境における異なる実行単位で使用が意図されたプログラムに制御を切り替える transfer 文を実行する場合、EGL デバッガーは、受信プログラムに割り当てられたビルド記述子を使用します。ビルド記述子の選択項目は、 以前に説明した規則に基づきます。

別のプログラムによって呼び出されたプログラムをデバッグする場合、EGL デバッガーは呼び出し先プログラムに割り当てられたビルド記述子を使用します。 ビルド記述子の選択項目は、上記に説明した規則に基づきます。ただし、 ビルド記述子を指定していない場合、呼び出し先プログラムが呼び出されるときに、デバッガーはビルド記述子のプロンプトを出しません。その代わり、呼び出し中プログラム用のビルド記述子が使用中のまま残されます。
注: これらのプログラムのいずれか (両方ではない) が VisualAge Generator との互換性を利用している場合は、呼び出し側および呼び出し先のプログラム用に異なるビルド記述子を使用する必要があります。VisualAge 互換性の生成時間状況は、ビルド記述子オプション VAGCompatibility の値によって判別されます。
コードのデバッグに使用するビルド記述子またはリソース関連パーツは、コードの生成に使用するものとは異なる可能性があります。例えば、COBOL 環境用に作成されたプログラムから VSAM ファイルにアクセスする場合は、おそらくビルド記述子内のリソース関連パーツを参照します。リソース関連パーツは、ランタイム・ターゲット・システム (zOS など) を参照し、ターゲット・システムに適切なファイル・タイプ (vsamrs など) を参照する必要があります。2 つの状態は、以下の点で異なります。
  • 生成時に、リソース関連パーツは、ターゲット環境で使用されるファイルのシステム名を示します。
  • デバッグ時に、システム名は、Windows® 2000/NT/XP 上の EGL 生成 Java プログラムからリモート VSAM ファイルにアクセスするときに適切なように、別の命名規則を反映する必要があります。 命名規則についての詳細は、『VSAM サポート』を参照してください。

SQL データベース・アクセス

SQL データベースへのアクセスに使用するユーザー ID およびパスワードを判別するために、EGL デバッガーは、情報が検出されるか、またはすべてのソースが考慮されるまで、以下のソースを順番に考慮します。
  1. デバッグ時に使用するビルド記述子。特に、ビルド記述子オプション sqlID および sqlPassword。
  2. SQL データベース接続設定の変更』に説明のある SQL 設定ページ。このページでは、他の接続情報も指定します。
  3. 接続時間に表示される対話式ダイアログ。このダイアログは、「Prompt for SQL user ID and password when needed (SQL ユーザー ID およびパスワードが必要な場合はプロンプト表示する)」チェック・ボックスを選択した場合にのみ表示されます。

call 文

以前にも記述したように、EGL デバッガーは、EGL ソース・コードを解釈することによって、transfer または show 文に応答します。ただし、EGL デバッガーは、call 文に対しては、 ビルド記述子に指定したリンケージ・オプション・パーツ (ある場合) を検討することによって応答します。参照したリンケージ・オプション・パーツに、呼び出し用の callLink エレメントが含まれる場合、結果は次のようになります。
  • callLink プロパティー remoteComType を DEBUG に設定する場合、EGL デバッガーは EGL ソース・コードを解釈します。デバッガーは、callLink プロパティー package および location を参照することによって、ソースを見つけます。
  • callLink プロパティー remoteComType を DEBUG に設定しない場合、デバッガーは、デバッガーが COBOL モードで実行されている場合でも、EGL 生成 Java プログラムを実行しているかのように EGL 生成コードを呼び出して、リンケージ・オプション・パーツ内の情報を使用します。
リンケージ情報がない場合、EGL デバッガーは EGL ソース・コードを解釈することによって call 文に応答します。リンケージ情報は、以下の場合には使用できません。
  • ビルド記述子が使用されていない。
  • ビルド記述子が使用されているが、そのビルド記述子にリンケージ・オプション・パーツが指定されていない。
  • ビルド記述子にリンケージ・オプション・パーツが指定されているが、参照されたパーツに、呼び出し先プログラムを参照する callLink エレメントがない。

デバッガーが EGL ソース・コードを実行する場合、呼び出し側から step into コマンドを実行することによって、そのプログラム内で文を実行できます。ただし、デバッガーが生成済みコードを呼び出す場合、デバッガーはプログラム全体を実行して、step into コマンドは step over コマンドのように機能します。

デバッグ時に使用されるシステム・タイプ

システム・タイプの値は、sysVar.systemType で使用できます。また、2 番目の値は、VisualAge Generator との開発時間互換性を要求した場合に、VGLib.getVAGSysType で使用できます。

sysLib.systemType の値は、ビルド記述子オプション system の値と同じです。ただし、値が以下の 2 つのいずれかの場合で DEBUG に設定されている場合は異なります。
  • EGL デバッガーの設定の変更』の説明にあるように「Set systemType to DEBUG (systemType を DEBUG に設定)」設定を選択する場合。
  • その設定の値に関わらず、デバッグ・セッション中に使用するためのビルド記述子として NONE を指定した場合。

システム関数 VGLib.getVAGSysType は、VisualAge Generator に相当する sysLib.systemType の値を戻します。詳細については、『VGLib.getVAGSysType』のテーブルを参照してください。

EGL デバッガー・ポート

EGL デバッガーは、Eclipse ワークベンチとの通信を確立するためにポートを使用します。デフォルト・ポート番号は 8345 です。別のアプリケーションがこのポートを使用している場合やファイアウォールによってポートがブロックされている場合は、『EGL デバッガーの設定の変更』の説明に従い別の値を設定してください。

EGL デバッガー・ポートとして 8345 以外の値を指定した場合、J2EE サーバー上で EGL プログラムをデバッグするときは、以下のようにサーバー構成を編集する必要があります。
  1. 「Environment (環境)」タブの「System Properties (システム・プロパティー)」セクションに進みます。
  2. 「追加」をクリックします。
  3. 「名前」に com.ibm.debug.egl.port と入力します。
  4. 「値」に新規のポート番号を入力します。

生成されたコードからの EGL デバッガーの呼び出し

部分的にデプロイされたアプリケーションで作業する場合は、EGL 生成 Java プログラムまたはラッパーから EGL デバッガーを呼び出して、EGL デバッガーを使用することができます。 プログラムでは、リンケージ・オプション・パーツの callLink エレメントに関連付ける call 文が必要です。同様に、ラッパーを callLink エレメントに関連付ける必要があります。いずれの場合も、エレメントはプロパティー removeComType を DEBUG として指定する必要があります。

デバッグ対象プログラムを J2EE で実行するかどうかに応じて、異なる規則が適用されます。
  • 呼び出し先プログラムを J2EE で実行しない場合は、呼び出し側をリモート・システムを含む任意の場所で実行できます。

    呼び出しが発生する前に、 Eclipse で実行するリスナー・プログラムを開始する必要があります。リスナーを開始するには、構成可能な設定が 1 つ (ポート番号)しかない EGL リスナー起動構成を使用します。 デフォルト・ポート番号は 8346 です。

    別のポート番号を指定するには、以下の手順を実行します。
    1. 「実行」メニューで、「デバッグ」をクリックします。
    2. 「デバッグ」ダイアログが表示されたら、「EGL リスナー」を選択します。
    3. 「新規」をクリックします。

    同時に複数の EGL リスナーを実行する場合、それぞれの EGL リスナーが独自のポートを必要とするので、ポートを指定する必要があります。別のアプリケーションがポート 8346 を使用している場合やファイアウォールによってポート 8346 の使用が禁止されている場合も、ポートを指定する必要があります。

    リスナー・ポートは、EGL 設定として指定された EGL デバッガー・ポートと異なります。

  • デバッグ対象プログラムを J2EE で実行する場合は、呼び出し側と同じ J2EE サーバーで実行する必要があります。EGL デバッガー jars をサーバーに追加し、サーバーをデバッグ・モードで実行する必要があります。

推奨

EGL デバッガーを処理する準備ができたら、以下の推奨条件を考慮してください (ほとんどの条件では、コードのデバッグ時に sysVar.systemType が DEBUG に設定されていることを前提としています)。
  • コードに、CICS® for z/OS® をターゲットとする transfer 文が含まれる場合、デバッグ時にはプログラム名を使用してランタイムにはトランザクション ID を使用するための条件文を書き込みます。以下に例を示します。
      if (systemType is zoscics)
        transferName = "FQ3R";
      else // when systemType is debug
        transferName = "myProgram";
      end
      transfer to transaction transferName;
  • データベースから日付を検索していて、ランタイム・コードがその日付を ISO 形式以外の形式で受け取るようにする場合、日付を変換するための関数を書き込みます。ただし、この関数は、システム・タイプが DEBUG である場合にのみ呼び出すようにしてください。ISO 形式は yyyy-mm-dd で、デバッガーが使用できる唯一の形式です。
  • デバッガーの実行時に使用するための外部 Java クラスを指定するには、『EGL デバッガーの設定の変更』の説明を参照して、クラスパスを変更します。例えば、 MQSeries®、JDBC ドライバー、または Java アクセス関数をサポートするには、追加のクラスが必要となる場合があります。
  • (別の EGL 関数でなく) JSF によって呼び出されたページ・ハンドラー関数をデバッグする場合に、関数から離れるには、「ステップオーバー」、「ステップイントゥ」、または「ステップ・リターン」でなく、「実行」を使用します。3 つのステップ・コマンドのいずれを使用しても、ページ・ハンドラーの生成 Java コードが表示されますが、この機能は EGL をデバッグする場合には不便です。 ステップ・コマンドのいずれかを使用した場合に、生成 Java コードを離れて、ブラウザーに Web ページを表示するには、「実行」を使用します。
  • SQL オプション WITH HOLD (または EGL 相当) を使用している場合、 オプション WITH HOLD は、EGL 生成 Java 用または EGL デバッガー内で使用できないことを認識しておく必要があります。ランタイムにのみ呼び出される条件文内に commit 文を配置することによって、部分的にこの制限を処理することができる場合があります。以下に例を示します。
      if (systemType not debug)
        sysLib.commit();
      end
EGL プログラムを J2EE サーバーでデバッグする場合、または EGL リスナーを使用してデバッグする場合は、EGL デバッガー・ポートの個数を指定するようにサーバーまたは EGL リスナーを構成する必要があります。
  • J2EE サーバーを構成するには、サーバー構成を編集します。
    1. 「Environment (環境)」タブの「System Properties (システム・プロパティー)」セクションに進みます。
    2. 「追加」をクリックします。
    3. 「名前」com.ibm.debug.egl.port と入力します。
    4. 「値」に新規ポート番号を入力します。
  • EGL リスナーを構成するには、EGL リスナー起動構成を編集します。
    1. 「Arguments (引き数)」タブに進みます。
    2. 「VM Arguments (VM 引き数)」フィールドに、次のように入力します。
        -Dcom.ibm.debug.egl.port=portNumber
      portNumber
      新規ポート番号

関連する概念
VisualAge Generator との互換性

VSAM サポート

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.(C) Copyright IBM Japan 2005.