RPG

414. RPGでエラーのあった行№を表示するには

RPGで例外エラーが発生したときはプログラム状況データ構造(SDS)に
エラーのあった情報が保管される。

    D*( プログラム状況データ構造 )        
    D INFDS_THIS     SDS                  
    D  PROC_NAM         *PROC             
    D*                             512A   
    D  PGMINFO                1    512    
    D  LINE_NUM              21     28    
    D  ROUTINE          *ROUTINE          
    D  ERR_NBR               30     37    
    D  CPFID                 40     46    
    D  SRCID                 77     78B 0 
    D  CPFDTA                91    170    
    D  CPFDTB               171    222    
    D  ERRMSGID              46     51    
    D  CURUSR               358    367    

PROC_NAM : プロシージャーの名前
LINE_NUM : エラーのあったソース・ステートメントの行№。
ただしこの行№を取得するためにはコンパイル・オプションで
*SRCSTMT を指定しておかなければならない。

[例]
CRTBNDRPG PGM(OBJLIB/PGM001) SRCFILE(MYSRCLIB/QRPGLESRC) DFTACTGRP(*NO)
ACTGRP(*NEW) OPTION(*SRCSTMT) DBGVIEW(*SOURCE) OUTPUT(*PRINT) AUT(*ALL)

このようにプログラム状況データ構造(SDS)を定義しているプログラムでは
コンパイル・オプションに *SRCSTMT を定義しておく必要がある。
*SRCSTMTを定義しておかないと LINE_NUM にソース行は埋め込まれない。
また参考までに説明しておくとLINE_NUM はつねに埋め込まれるのではなくエラーのあったときだけに
ソース行がLINE_NUMに埋め込まれるようになっている。