RPG

154. エラーや実行の位置を正確に調べるには ?

ログやエラーが発生したときに元のプログラムのどのステートメントで
発生したのかを正確に知るには障害の追跡に重要であるが、
ログだけでは既にスタックは終了しているので知ることはできないと
思ってはいないだろうか ?
バッチ処理では特にエラーやログがどのステートメントで出力されたのかを
知ることは重要であり、HTTPサーバー配下で実行されたジョブのエラー追跡も
次に紹介する方法で正確に知ることができる。

例として弊社の提供する ALASKA 配下での CGI の実行を例に挙げて説明する。

最初に WRKACTJOB によって次のように表示する。


                                   活動ジョブの処理                       
                                                                09/06/08 
    CPU %:   15.5     経過時間 :   00:00:01     活動ジョブ数 :   124     
                                                                         
    オプションを入力して,実行キーを押してください。                     
      2= 変更   3= 保留     4= 終了   5= 処理   6= 解放   7=メッセージ の表示
      8=スプール・ファイル の処理   13= 切断 ...                                 
                                                                         
    OPT  サブシステム/ジョブ   ユーザー   タイプ  CPU %   機能            状況   
         ENTPRSSVR      QSYS        SBS      .0                   DEQW   
           ALASKA       QTMHHTTP    BCH      .0  PGM-ALASKA_V5    TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   
           AURORA_EGN   QTMHHTTP    BCI      .0  PGM-AURORA_EGN   TIMW   

次に調査する子プロセス(AURORA_EGN) を「5= 処理」で選択する。


                                   ジョブの処理                         
                                                            システム :  
   ジョブ :   AURORA_EGN     ユーザー :   QTMHHTTP       番号 :   024499
                                                                        
   次の中から1つを選択してください。                                   
                                                                        
        1. ジョブ状況属性の表示                                         
        2. ジョブ定義属性表示                                           
        3. ジョブ実行属性の表示(活動状態の場合)                       
        4. スプール・ファイルの処理                                     
                                                                        
       10. ジョブ・ログの表示(活動状態またはジョブ待ち行列上の場合)   
       11. 呼び出しスタックの表示(活動状態の場合)                     
       12. ロックの処理(活動状態の場合)                               
       13. ライブラリー・リストの表示(活動状態の場合)                 
       14. オープンされたファイルの表示(活動状態の場合)               
       15. ファイル一時変更の表示(活動状態の場合)                     
       16. コミットメント制御状況の表示(活動状態の場合)               

の画面に対して「10. ジョブ・ログの表示」を選択する。


                                 ジョブ・ログ表示                               
                                                                 システム:   S103PH1
   ジョブ . :   AURORA_EGN    ユーザー  . :   QTMHHTTP       番号  . . . :   024499 
                                                                                
       ASNET.COM のサブシステム ENTPRSSVR のジョブ 024499/QTMHHTTP/AURORA_EGN が
         09/06/08 13:21:43 に開始された。ジョブは 09/06/08 13:21:43  にシステム 
          に入れられました。                                                    
        データ域 USRSTK がライブラリー QTEMP に作成された。                     
        データ域 PGMSTK がライブラリー QTEMP に作成された。                     
        ライブラリー・リストが変更された。    

さらに「F10= 詳細メッセージの表示」を押すことによって、すべての
ロー・レベル・メッセージを表示させることができる。
ジョブ・ログ表示 に対しては F10キーを押すことは重要である。
さてこれからが本題であり、どれかのメッセージにカーソルをセットして
F1 キーを押すとそのメッセージが次のように表示される。


                                追加のメッセージ情報                             
                                                                                 
    メッセージ ID  . . . . :   CPC2101                                           
    送信日付 . . . . . . . :   09/06/08      送信時刻 . . . . . . . :   13:21:51 
                                                                                 
     メッセージ . . :    ライブラリー・リストが変更された。                      
                                                                                 
     原因−−ユーザー・ライブラリー・リストは指定したライブラリー・リストによって
       置き換えられました。   
   
   F1= ヘルプ   F3= 終了   F6= 印刷   F9= メッセージ詳細の表示   F12= 取り消し
   F21= 援助レベルの選択                                                         

ここで今回、紹介するのはここでさらに 「F9= メッセージ詳細の表示」を
押すことである。
詳細がつぎのように表示される


                              メッセージの明細の表示                           
                                                                               
   メッセージ ID  . . . . :   CPC2101       重大度 . . . . . . . . :   00      
   送信日付 . . . . . . . :   09/06/08      送信時刻 . . . . . . . :   13:21:51
   メッセージ・タイプ . . :    完了                                            
   CCSID  . . . . . . . . :   65535                                            
                                                                               
   送信元プログラム . . . . . . . :   QLICHLIB                                 
     送信元ライブラリー . . . . . :     QSYS                                   
     命令 . . . . . . . . . . . . :     00C9                                   
                                                                               
   送信先プログラム . . . . . . . :   QC2SYS                                   
     送信先ライブラリー . . . . . :     QSYS                                   
     送信先モジュール . . . . . . :     QC2SYS                                 
     送信先プロシージャー . . . . :     system                                 
     送信先ステートメント . . . . :     6                                      

この送信先プロシージャーと送信先ステートメントが、このメッセージが
出力されたステートメントであることを意味している。
このメッセージがエラー・メッセージである場合にはエラーが発生した元の
プログラムのステートメントも、この方法によって知ることができるのである。
この調査は障害の発生元を突き止めるのに非常に有効であり、
RPG だけでなく CLP, COBOL, C/400 などのあわゆる言語でもこの方法で
発生元を突き止めることができるのである。