デバッグとは、プログラムの実行をモニターして、エラーの原因を特定するプロセスのことです。
EGL デバッガーでは、ブレークポイント (実行を一時停止する場所) の設定や、
変数の確認または変更を行ったり、プログラムを少しずつ進めることができます。以下のコードをデバッグできます。
- JSF ハンドラー
- プログラム
- Web トランザクション
- Rich UI ハンドラー
最も単純なデバッグでは、次のステップが実行されます。
- プログラムを中断する設定を選択します。とクリックする。
「実行の中断」の下にある「初期実行単位の先頭行で停止」をクリックします。
- UI テクノロジーに応じて、起動するファイルを選択します。
- JSF の場合は、JSF ハンドラーに関連付けられている .jsp ファイルを右クリックし、をクリックします。
- Web トランザクションの場合は、EGLWebStartup.jsp を右クリックし、をクリックします。
- バッチ・プログラムの場合は、.egl ファイルを右クリックし、をクリックします。
- Rich UI の場合は、.egl ファイルを右クリックし、をクリックします。詳しくは、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 デバッガーに及ぼす影響を参照してください。