EGL アプリケーションのデバッグ

デバッグとは、プログラムの実行をモニターして、エラーの原因を特定するプロセスのことです。 EGL デバッガーでは、ブレークポイント (実行を一時停止する場所) の設定や、 変数の確認または変更を行ったり、プログラムを少しずつ進めることができます。以下のコードをデバッグできます。
  • プログラム
  • Web トランザクション
  • Rich UI ハンドラー
最も単純なデバッグでは、次のステップが実行されます。
  • プログラムを中断する設定を選択します。「ウィンドウ」 > 「設定」 > 「EGL」 > 「デバッグ」とクリックする。 「実行の中断」の下にある「初期実行単位の先頭行で停止」をクリックします。
  • UI テクノロジーに応じて、起動するファイルを選択します。
    • Web トランザクションの場合は、EGLWebStartup.jsp を右クリックし、「デバッグ」 > 「サーバーでデバッグ」をクリックします。
    • バッチ・プログラムの場合は、.egl ファイルを右クリックし、「デバッグ」 > 「EGL プログラム」をクリックします。
    • Rich UI の場合は、.egl ファイルを右クリックし、「デバッグ」 > 「EGL Rich UI アプリケーション」をクリックします。詳しくは、Rich UI のデバッグを参照してください。
  • プログラムを開始します。
  • コードが実行単位の最初の行で中断し、EGL から「デバッグ」パースペクティブに変更するかどうかを尋ねられます。 「はい」をクリックします。
  • 「ステップイン」ボタンをクリックして、プログラム内を移動します。

SQL アクセス用 JDBC を使用したデバッグ

デバッガーは、SQL アクセス用 JDBC を使用します。この結果、JDBC を使用しない環境での実行とは、以下の違いが生じます。
  • JDBC は 2 フェーズ・コミットをサポートしません。コミットとロールバックに関して、SQL マネージャーと WebSphere® MQ (以前の MQSeries®) マネージャーの呼び出しは別個に行われます。したがって、問題が 発生したときに、特定のリソースをコミットまたはロールバックし、他のリソースに対しては、 対応するコミットまたはロールバックを行わないことが可能です。
  • JDBC では、常に動的 SQL を実行します。生成される COBOL では、EGL prepare 文または表名ホスト変数 (SQLRecord 定義内の tableNameVariablesプロパティー) を使用する場合を除き、静的 SQL が使用されます。したがって、以下の違いがあります。
    • 動的モードでは、単一行の選択で、sysVar.sqlData.sqlCode を -811 に設定することなく、複数の行が戻されることがあります。 基準を満たす行が 1 行のみである限りは、違いはわかりません。 この違いが重要である場合に、この違いに対処する方法については、以下のサンプル技法を参照してください。
    • JDBC では、「FOR BIT DATA」オプションを付けてホストに CHAR、DBCHAR、または MBCHAR SQL 列として定義されているデータが変換されます。この状態にある場合は、「FOR BIT DATA」として定義されている SQL 列に対応するフィールドの asBytes プロパティーに YES を設定してください。
以下の制限も、デバッグ・プログラムと Java™プログラムの両方に適用されます。 デバッグ・プログラムと生成される COBOL プログラムには違いがありますが、 デバッグ・プログラムと生成される Javaプログラムには違いがありません。
  • DATE、TIME、および TIMESTAMP のプリミティブ型を含む SQL 列用のフィールドを定義するときは、必ずこれらのプリミティブ型を使用してください。CHAR プリミティブ型は、 その CHAR 変数の sqlDataCode プロパティーに、SQL 列の型を 示す値が設定されている限り、使用できます。sqlDataCode プロパティーを指定せずに CHAR を使用することもできますが、sqlDataCode を省く場合は、日付を CHAR 形式に変換する処理を JDBC ドライバーに依存しなければなりません。 sqlDataCode について詳しくは、sqlDataCodeを参照してください。
  • JDBC ではいくつかの SQL 情報をサポートしません。
    • sqlLib.sqlData.sqlerrmc
    • sqlLib.sqlData.sqlwarn[n]
    • sysVar.sqlData.sqlerrmc
    • sysVar.sqlData.sqlwarn[n]

より高度なデバッグを行う場合は、起動構成、ブレークポイント、データベース接続、 変数値の設定、およびその他の概念が対象となります。概要については、 EGL デバッガーでのアプリケーションのステップスルーを参照してください。

ホストと異なるデバッグ環境

デバッグ環境がホスト環境と異なる場合に使用できる技法が 1 つあります。 「EGL」 -> 「デバッグ」設定で、 「systemType を DEBUG に設定」を選択してください。EGL プログラムに、 以下のようなロジックを組み込むことができます。
	if (sysVar.systemType is debug) 	
	   // do nothing
	else
	   //  sysVar.sqlData.sqlCode = -811 かどうかを検査
	end

これにより、ホスト・システムでのみ有効なシステム固有のロジックを組み込むことが できます。

キーボードの違いについては、validationBypassKeysまたはhelpKeyに記載されている EGL ファンクション・キー・マッピング表を参照してください。

ホスト環境がワークステーションとは異なるコード・ページを使用する場合、デバッガーで使用されるコード・ページを変更することもできます。 詳しくは、EGL デバッガーの文字エンコード・オプションを参照してください。

プログラムのデバッグ

JEE の下で実行されないプログラムをデバッグするときは、EGL デバッガーでのアプリケーションのステップスルーの記述に従ってデバッグ・セッションを開始できます。

EGL デバッガー・コマンドについての詳細は、EGL デバッガーのコントロールを参照してください。 ビルド記述子の設定が EGL デバッガーに及ぼす影響についての詳細は、 ビルド記述子の設定が EGL デバッガーに及ぼす影響を参照してください。