診断機能は、アプリケーションエラーが発生した場合や実行時メッセージが表示されたときに、プログラムを診断し、診断情報をレポートファイルに出力します。レポートファイル名は、アプリケーションエラーが発生した場合に表示されるメッセージの中に表示されます。
PowerCOBOLの診断機能は、COBOLの診断機能をもとに構築されています。診断機能の詳細については、『NetCOBOL ユーザーズガイド』を参照してください。
以下に、診断機能を利用するために必要な環境と、PowerCOBOL固有の診断結果の見かたについて説明します。
診断機能を利用するには
PowerCOBOL固有の診断機能の対象となるのは、モジュールに登録された外部COBOLファイルの手続きおよびフォームのスクリプトにある手続きです。モジュールに登録されたオブジェクトファイルやライブラリファイルに対しては、COBOLの診断機能に準じた情報が出力されます。
PowerCOBOL固有の診断機能を利用する場合、以下のファイルが必要です。
各ファイルが生成されるフォルダについては、「5.5.4 ビルド時に作成されるファイル」を参照してください。
ファイル | 説明 |
---|---|
フォーム名.SVD | COBOLのデバッグ情報ファイルです。COBOLの診断機能を利用するために必要です。 |
モジュール名.PLI | PowerCOBOLの行情報ファイルです。PowerCOBOL固有の診断情報を出力するために必要です。 |
PowerCOBOL固有の診断機能を利用するには、PowerCOBOLの行情報ファイル"モジュール名.PLI"が必要です。このファイルは、ターゲットフォルダに生成されます。このファイルを削除すると、PowerCOBOL固有の診断情報は出力されず、COBOLの診断機能に準じた情報だけが出力されます。
ビルドモードにより、診断機能を利用するための設定方法が異なります。
リリースモードの場合
ビルドモードがリリースモードの場合、プロジェクトのプロパティ設定ダイアログボックスの[ビルド]タブで、[診断機能を使用する]をチェック状態にしてビルドすると、診断機能を利用することができます。
ポイント
リリースモードで作成されるデバッグ情報ファイル"フォーム名.SVD"は、翻訳オプション"OPTIMIZE"を指定することによってサイズを小さくできます。
注意
リリースモードで作成した実行可能プログラムを、他のフォルダに複写または移動して実行する場合、実行可能プログラムと同じフォルダにあるデバッグ情報ファイル(*.SVDおよび*.PLI)も複写または移動してください。デバッグ情報ファイルを複写または移動しなかった場合、言語イメージの診断情報、およびPowerCOBOL固有の診断情報は出力されません。
デバッグモードの場合
ビルドモードがデバッグモードの場合、プロジェクトのプロパティ設定ダイアログボックスの[ビルド]タブの[診断機能を使用する]のチェック状態に関係なく、診断機能を利用できます。
ポイント
複数のプロジェクトから構成されるプログラムで診断機能を利用する場合には、最初に起動されるモジュールのプロパティ設定ダイアログボックスで[デバッグ]タブにある[デバッグ情報ファイル格納フォルダ]に、他のプロジェクトで作成したモジュールのデバッグ情報ファイル"モジュール名\Debug\フォーム名.SVD"が格納されているフォルダを設定してください。
注意
デバッグモードで作成した実行可能プログラムを、PowerCOBOLの開発環境の外で実行させる場合や、他のフォルダに複写または移動して実行させる場合、デバッグ情報ファイルが格納されているフォルダを参照できないため、言語イメージの診断情報およびPowerCOBOL固有の診断情報は出力されません。
実行環境変数"@GOPT"でエラー検出時の処理実行回数が指定されている場合、PowerCOBOLで指定する[メッセージを出力させる回数]より、実行環境変数"@GOPT"での指定が優先されます。
診断機能のレポートに出力されるPowerCOBOL固有の部分の見かたを説明します。以下に、診断結果の出力例を示します。
: 《問題箇所》 スレッドID : 000000AC レジスタ : EAX=00000000 EBX=0012FAA4 ECX=00000000 EDX=00000000 ESI=0012FA68 : EDI=0012FB8C EIP=00401377 ESP=0012FA08 EBP=0012FB54 EFL=00000283 : CS=001B SS=0023 DS=0023 ES=0023 FS=0038 GS=0000 スタックコミット : 00004000 (トップ:00130000, ベース:0012C000) 命令 : アドレス +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f 00401367 00 0F BF 05 42 60 40 00 99 0F BF 0D 3A 60 40 00 フォールト ->00401377 F7 F9 66 89 45 DA 0F BF 45 DA B1 04 B5 00 8D 3D モジュールファイル : C:\Samples\Release\Main.exe セクション相対位置 : .text+00000377 EXPORT相対位置 : MAINFORM+00000343 シンボル相対位置 : MAINFORM+00000377 翻訳情報 : ShiftJIS, シングルスレッド , NOOPTIMIZE PowerCOBOLプロジェクトファイル : C:\Samples\Abend01.ppj モジュール : Main フォーム : MainForm スクリプト : MainForm-Click 行位置 : 8 <呼出経路> [ 1]------------------------------------------------------------------------- モジュールファイル : C:\Samples\Release\Main.exe セクション相対位置 : .text+00000F8 EXPORT相対位置 : MAINFORM+000001C4 シンボル相対位置 : MAINFORM+000001F8 翻訳情報 : ShiftJIS, シングルスレッド , NOOPTIMIZE PowerCOBOLプロジェクトファイル : C:\Samples\Abend01.ppj モジュール : Main フォーム : MainForm 行位置 : 35 [ 2]------------------------------------------------------------------------- :
異常が検出されたPowerCOBOLのプロジェクトファイル名です。診断された異常が、このプロジェクトで作成された実行可能プログラム内で発生していることを示しています。PowerCOBOLの行情報ファイルが見つからない場合は、不明(Unknown)と表示されます。
異常が検出されたモジュールの名前です。このモジュールに含まれる手続きの中に異常があります。
異常が検出されたフォームの名前です。このフォームに含まれるスクリプトの中に異常があります。
異常が検出された手続きの名前です。この手続きの中に異常があります。
PowerCOBOLのモジュールに登録された外部COBOLファイル内で異常が検出された場合は、そのオブジェクト名と、ファイル名が出力されます。
異常が検出された手続き中での行番号、またはCOBOLファイル中でのファイル内相対行番号です。
中断位置・情報ファイルと出力される情報との関係
異常が検出され中断された位置の情報は、その中断位置と情報ファイルにより、以下の表のようになります。
情報名 | 中断位置 | 情報ファイル | 備考 | ||||
---|---|---|---|---|---|---|---|
イベント手続き | 外部COBOLファイル | フォームの外部手続き | 行情報なし | デバッグ情報なし | 行・デバッグ情報なし | ||
モジュールファイル | ○ | ○ | ○ | ○ | ○ | ○ | |
セクション相対位置 | ○ | ○ | ○ | ○ | ○ | ○ | |
EXPORT相対位置 | ○ | ○ | ○ | ○ | ○ | ○ | |
シンボル相対位置 | ○ | ○ | ○ | ○ | *2 | *2 | |
PowerCOBOL | ○ | ○ | ○ | *1 | - | - | PowerCOBOL固有 |
モジュール | ○ | ○ | ○ | - | - | - | PowerCOBOL固有 |
フォーム | ○ | - | ○ | - | - | - | PowerCOBOL固有 |
スクリプトレット | ○ | - | - | - | - | - | PowerCOBOL固有 |
COBOLファイル | - | ○ | - | - | - | - | PowerCOBOL固有 |
行位置 | ○ | ○ | ○ | - | - | - | PowerCOBOL固有 |
ソースファイル | - | - | - | ○ | - | - | |
外部プログラム | - | ○ | - | ○ | - | - | |
内部プログラム | - | ○ | - | ○ | - | - | |
文位置 | - | - | - | ○ | - | - |
*1: PowerCOBOL行情報ファイルが見つからない場合には、PowerCOBOLプロジェクトファイルは不明(Unknown)となります。
*2: LINKのオプションの指定(/DEBUG)により、出力されます。