はじめに
皆さんはエラーが発生した際にどのように原因を調査していますか?
STRDBG
を使用してデバッグする事もあるかと思います。
しかし私自身、原因が曖昧なままSTRDBG
を使用すると問題解決までに必要以上に時間を要することがあります。
この記事では、エラーが発生した際の基本的な原因の確認方法をご紹介します。
コンパイル時のエラー
コンパイルエラーの原因はスプールファイルを確認することで調査することが可能です。
- 「メッセージの要約」から MSG-ID とエラー内容を確認する。(画像1)
- MSG-ID を検索する。
- 問題となっているプログラム内の SEQ(行番号)とエラーの詳細を確認する。(画像2)
上記の手順により、プログラム内でエラーとなっている箇所を調査することが可能です。
プログラム実行中のエラー
プログラム実行中にエラーが発生した際は ① スプールファイル、② プログラムメッセージ、又は ③ メッセージ識別コードから調査することが可能です。
① スプールファイル
エラーのプログラムメッセージが表示された際の応答に「D:RPG 定様式ダンプの取得」を選択することで、エラー発生時にフィールドに何がセットされていたかを調査することができます。
例として(画像3)の場合、数字型である W#INT002 に文字型がセットされているため、W#INT002 に値をセットするロジックに問題があることが分かります。
② プログラムメッセージ
エラーメッセージは、(画像4)のようにコンパイルした際のスプールファイルに対するステートメント番号(行番号)を表示しています。(※プログラム内の行番号を表示することも可能です。)
このステートメント番号からプログラム内でエラーとなっている箇所を調査することが可能です。
③ メッセージ識別コード
コマンドDSPMSGD
のパラメーターであるメッセージ ID の下限値にエラーメッセージに表示されているメッセージ識別コードを指定し、実行することで表示されているメッセージ自体の詳細を知ることが可能です。(画像5)
この方法は見当がつかないエラーに対処する際、解決への手掛かりとなる場合があります。
おわりに
IBM i は様々な方法でエラーの原因を調査することができます。
ご参考になれば幸いです。最後までお読み頂きありがとうございます。