AS400 / IBM i のジョブログで MCH3601 が出ると、プログラム例外、ポインター、配列、データ構造、呼び出しパラメーターのどこを見ればよいか迷いやすくなります。RPGやCLの修正後、外部呼び出し、Web化・API化の途中で表面化することもあります。
この記事では、MCH3601を見た時の初動確認を、AS400保守現場の目線で整理します。最後の異常終了だけでなく、直前のCALL、RPGソース、パラメーター、ジョブログの前後関係を確認します。
MCH3601で最初に見る場所
- ジョブログでMCH3601の直前に出ているメッセージ
- 異常終了したプログラム名とモジュール名
- RPGの該当ステートメント、配列、データ構造、ポインター
- CALLやCALLPのパラメーター数、桁数、型の不一致
- 直近で変更したソース、コピー句、ファイル定義
RPG修正後に出た場合
RPG修正後にMCH3601が出た場合は、まず変更箇所だけでなく、呼び出し元と呼び出し先のパラメーター定義を比べます。桁数、符号、小数点、文字長、配列要素数、データ構造のサブフィールドがずれると、実行時に例外になることがあります。
固定形式RPGの場合は、見た目では桁位置のずれに気づきにくいことがあります。コンパイルリスト、ソース行、DSPPGMREF、DSPFFDを合わせて確認し、必要なら一つ前の正常版と差分を見ます。
Web化・API化で出た場合
5250画面では動いていた処理をWebやAPIから呼び出した時にMCH3601が出る場合、対話型ジョブとサーバージョブで環境が変わっている可能性があります。ライブラリリスト、ユーザープロファイル、QTEMP、ジョブ記述、呼び出しパラメーターの作り方を確認します。
RPGをそのまま外部から呼ぶ場合は、画面入力前提の変数、初期化されていないフィールド、画面ファイル依存、出力キュー依存が残っていないかを確認します。Web化の入口は AS400のRPGをWeb化する前に確認すること にまとめています。
AIで調査メモを整理する時
MCH3601の調査にAIやCodexを使う場合は、機密情報を削除したうえで、ジョブログ、該当RPGソース、CALL関係、パラメーター定義を分けて整理します。AIの回答は原因確定ではなく、確認観点の洗い出しとして扱います。
AI・Codexの安全な使い方は AS400保守でAI・Codexを安全に使う方法、メッセージID全体の入口は AS400メッセージID・エラーコード索引、RPGの読み方は RPG固定形式・フリーフォーマットの読み方 を確認してください。
MCH3601対応前チェックリスト
- ジョブログの前後を保存したか
- 異常終了したプログラムと呼び出し元を確認したか
- CALLパラメーターの数、型、桁数を比べたか
- 配列、データ構造、ポインター、初期化漏れを確認したか
- 直近変更とコンパイルリストを確認したか
MCH3601は、単なるエラー番号ではなく、プログラムの呼び出し方やデータの渡し方に問題が隠れているサインです。ジョブログ、RPGソース、パラメーター、実行環境を一つずつ確認すると、原因を絞りやすくなります。
関連するAS400確認ルート
MCH3601はRPGのポインターやCALLパラメーターだけでなく、実行時データとジョブログを合わせて切り分けます。
ポインターまたはパラメーターのエラーで検索した時
「AS400 ポインターまたはパラメーターのエラー」で調べている場合は、MCH3601そのものだけでなく、CALL元とCALL先のパラメーター定義、配列添字、NULL相当の値、外部記述ファイル変更後の再コンパイル漏れを合わせて見ます。メッセージの直前に出ているCPF/RNXや、同じジョブ内のCALL順も原因の手がかりになります。
- RPGの読み方に戻るなら RPG固定形式・自由形式の読み方
- CALLやMONMSGを見るなら AS400のCL入門
- メッセージを横断確認するなら AS400メッセージID・エラーコード一覧
MCH3601の調査を属人化させない
MCH3601のようなポインター系エラーは、発生条件や直前のデータ状態を追えないと調査が属人化しやすくなります。再現条件、入力値、変更履歴、ジョブログ、関連プログラムを残しておくことで、次回の保守対応や教育に使える記録になります。
- 関連するコンパイル・実行時エラーは、AS400 RPG/CLコンパイルエラー確認も参照してください。
- ジョブログの基本は、AS400ジョブログ初心者向け確認手順で確認できます。
- 調査観点を若手に教えるなら、AS400 / IBM i 現場向けCodex実戦研修で説明文と確認手順を標準化できます。
- 原因調査や保守体制の見直しが必要な場合は、お問い合わせから発生条件を共有してください。
MCH3601 errorで最初に疑う実例
MCH3601 errorは、最後の異常終了メッセージだけを見ても原因が分かりにくいことがあります。RPGの修正後、CALL元とCALL先のパラメーター定義がずれた、配列の添字が想定外になった、データ構造の長さが変わった、Web/API経由で対話型とは違うジョブ環境になった、という実例が多いです。
| 症状 | 疑うこと | 確認するもの |
|---|---|---|
| 修正後だけ落ちる | CALLパラメーターの桁・型・個数違い | 呼び出し元/先の定義、コンパイル日時 |
| 特定データだけ落ちる | 配列範囲外、ゼロ除算、想定外コード | 入力データ、直前のRNX/CPF |
| API経由だけ落ちる | ユーザー、ライブラリリスト、QTEMPの違い | ジョブ属性、JOBD、実行環境 |
| 原因行が追いにくい | 直前メッセージを見落としている | ジョブログを下から上へ戻って読む |
ジョブログ全体の読み方は AS400ジョブログの読む順番、RPG/CLの影響確認は RPG/CL影響調査チェックリスト も合わせて確認してください。
参考:IBM公式ドキュメント(CALL)
本記事で扱った CALL の全パラメーターと指定できる値は、IBM公式ドキュメントで確認できます。指定できる値や既定値はOSリリースによって異なるため、本番環境では自社のリリースに合わせて確認してください。