第5章 PowerCOBOLを使いこなそう
5.5 実行可能プログラム作成時および実行 時の便利な機能 時の便利な機能
5.5.12 診断機能を利用する
診断機能は、アプリケーションエラーが発生した場合や実行時メッセージが表 示されたときに、プログラムを診断し、診断情報をレポートファイルに出力し ます。レポートファイル名は、アプリケーションエラーが発生した場合に表示
されるメッセージの中に表示されます。
PowerCOBOLの診断機能は、COBOLの診断機能をもとに構築されています。診断 機能の詳細については、『NetCOBOL 使用手引書』を参照してください。
以下に、診断機能を利用するために必要な環境と、PowerCOBOL固有の診断結果 の見かたについて説明します。
診断機能を利用するには
PowerCOBOL固有の診断機能の対象となるのは、モジュールに登録された外部 COBOLファイルの手続きおよびフォームのスクリプトにある手続きです。モジ ュールに登録されたオブジェクトファイルやライブラリファイルに対しては、
COBOLの診断機能に準じた情報が出力されます。
PowerCOBOL固有の診断機能を利用する場合、以下のファイルが必要です。
各ファイルが生成されるフォルダについては、「ビルド時に作成されるファイ ル(→p120)」を参照してください。
ファイル名 意味
フォーム名.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,/DEBUGTYPE:{COFF│BOTH})により、出力 されます。