第5章 PowerCOBOLを使いこなそう
5.5 実行可能プログラム作成時および実行時の便利な機能
5.5.12 診断機能を利用する
診断機能は、アプリケーションエラーが発生した場合や実行時メッセージが表示されたときに、プログラムを診断し、診断情報をレポー トファイルに出力します。レポートファイル名は、アプリケーションエラーが発生した場合に表示されるメッセージの中に表示されます。
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固有部分の診断結果の見かた
診断機能のレポートに出力される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のプロジェクトファイル名です。診断された異常が、このプロジェクトで作成された実行可能プログ ラム内で発生していることを示しています。PowerCOBOLの行情報ファイルが見つからない場合は、不明(Unknown)と表示されま す。
モジュール
異常が検出されたモジュールの名前です。このモジュールに含まれる手続きの中に異常があります。
フォーム
スクリプトレット
異常が検出された手続きの名前です。この手続きの中に異常があります。
COBOLファイル
PowerCOBOLのモジュールに登録された外部COBOLファイル内で異常が検出された場合は、そのオブジェクト名と、ファイル名が 出力されます。
行位置
異常が検出された手続き中での行番号、またはCOBOLファイル中でのファイル内相対行番号です。
中断位置・情報ファイルと出力される情報との関係
異常が検出され中断された位置の情報は、その中断位置と情報ファイルにより、以下の表のようになります。
情報名 中断位置 情報ファイル 備考
イベント手続き 外部COBOLファイル フォームの外部手続き 行情報なし デバッグ情報なし 行・デバッグ情報なし
モジュールファイル ○ ○ ○ ○ ○ ○
セクション相対位置 ○ ○ ○ ○ ○ ○
EXPORT相対位置 ○ ○ ○ ○ ○ ○
シンボル相対位置 ○ ○ ○ ○ *2 *2
PowerCOBOL
プロジェクトファイルあり ○ ○ ○ *1 - - PowerCOBOL固有
モジュール ○ ○ ○ - - - PowerCOBOL固有
フォーム ○ - ○ - - - PowerCOBOL固有
スクリプトレット ○ - - - - - PowerCOBOL固有
COBOLファイル - ○ - - - - PowerCOBOL固有
行位置 ○ ○ ○ - - - PowerCOBOL固有
ソースファイル - - - ○ - -
外部プログラム
/クラス - ○ - ○ - -
内部プログラム
/メソッド - ○ - ○ - -
文位置 - - - ○ - -
*1: PowerCOBOL行情報ファイルが見つからない場合には、PowerCOBOLプロジェクトファイルは不明(Unknown)となります。
*2: LINKのオプションの指定(/DEBUG)により、出力されます。