COBOL2002 ユーザーズガイド


付録L.4 障害事例

過去に多く発生した障害事例を次に示します。

〈この項の構成〉

(1) コンパイル時のトラブル

項番

現象

原因

対策

1

ODBCインタフェース機能で,埋め込みSQLにDB固有の構文(WITH (ROWLOCK,UPDLOCK)指定やSCOPE_IDENTITY()関数など)を記述すると,コンパイル時にKCCC3800C-Sエラーとなりました。

埋め込みSQLにDB固有の構文は使用できません。

ODBCインタフェース機能では,マニュアル「COBOL2002 言語 拡張仕様編」 「9 データベースアクセス機能」に記載している構文だけが使用できます。次のどちらかの方法で対策してください。

  • 動的SQLを使用する。

  • HiRDBやOracleを使用している場合は,ODBC経由ではなくプリコンパイラを使用する。

2

コンパイル時に,算術演算でKCCC4355C-Iエラーとなりました。

一つの算術文に複数の算術式を記述したことで中間結果が30けたを超えました。

複数記述された算術式は複数の算術文に分割してください。

このとき,データ項目の整数部のけた数,小数部のけた数は,算術式の値を格納できるけた数で定義してください。

(2) 実行時のトラブル

項番

現象

原因

対策

1

CALL文による動的なリンクでの呼び出しでKCCC0003R-Sエラーとなりました。

次の原因が考えられます。

  1. 環境変数CBLLDLLに,呼び出し先プログラムを含むDLLが指定されていない。

  2. 環境変数CBLLPROGDLL指定時に,呼び出し先プログラム名とDLL名が一致していない。

  3. 呼び出し先プログラムが,DLLからエクスポートされていないため,指定されたDLLに呼び出し先プログラムが存在しない。

原因ごとの対策を次に示します。

  1. 環境変数CBLLDLLの指定が正しいか確認する。

  2. 呼び出し先プログラムのプログラム名とDLL名が一致しているか確認する。呼び出し先プログラム名にハイフン(-)を含む場合,DLL名もハイフン(-)のままの名称とする(下線(_)に置き換えない)。

  3. 呼び出し先プログラムを含むDLLのエクスポート情報を参照し,呼び出し先プログラムがエクスポートされていることを確認する。呼び出し先プログラムがエクスポートされていない場合,エクスポートするようにプログラムまたはメイクファイルを修正する。DLLでエクスポートされているシンボル名は次の方法で確認できる。

    ・COBOL2002情報抽出ツールにDLLファイルを指定して実行する。

    ・/EXPORTSオプションを指定したdumpbinコマンドにDLLファイルを指定して実行する。

2

CALL文による動的なリンクでの呼び出しでKCCC0131R-Sエラーとなりました。

ロード対象DLLにリンクされた,ほかのDLLがロードできません。

DLLをロードするには,ロード対象DLLにリンクされたすべてのDLLが存在し,かつ,環境変数PATHにこれらのDLLへのパスが指定されていなければなりません。環境変数PATHに,すべての必要なパスが指定されているか確認してください。

ロード対象DLLにリンクされたDLLは次の方法で確認できます。

  • COBOL2002情報抽出ツールにロード対象DLLを指定して実行する。

  • /DEPENDENTSオプションを指定したdumpbinコマンドにロード対象DLLを指定して実行する。

3

COBOLプログラムが正常終了したあとの終了コードが0以外になりました。

戻り値を持たないプログラムを呼び出しています。

COBOLプログラムが正常終了した場合,RETURN-CODE特殊レジスタの値がプログラムの終了コードになります。

プログラム実行中にC言語などで作成された戻り値を持たない(void型)プログラムを呼び出した場合,RETURN-CODE特殊レジスタの値は不定となります。この状態でプログラムを終了すると,プログラムの終了コードは不定となります。

この場合,プログラムを終了する直前に,明示的にRETURN-CODE特殊レジスタの値を設定してください。

4

COBOLプログラムが終わらないため,タスクマネージャから強制終了したが,原因がわかりませんでした。

次の原因が考えられます。

  • PERFORM文などの反復処理の終了条件が真にならない。

  • ACCEPT文やSTOP文で応答待ちになっている。

実行中の処理を特定し,原因を取り除いてください。

実行中の処理は次の手順で特定できます。

  1. タスクマネージャで調査対象のプロセスを選択し,右クリックでダンプファイルの作成を選択する。

  2. COBOL2002情報抽出ツールに,手順1.で作成したダンプファイル(プロセスダンプ)を指定して実行する。

  3. 手順2.で出力した情報抽出ツール出力結果リストの実行中プログラムの情報から,実行中プログラムの処理を特定する。なお,コンパイル時にデバッグオプションの指定がない場合,実行中プログラムの行番号は特定できない。

注※

dumpbinコマンドは,Visual Studio,およびCOBOL2002で提供しています。