CL

61. CLP でのエラー・モニター (2)

CLP の実行で期待どおりに動作しない場合、デバッグすればよいのだがバッチ・ジョブでの実行や
ごく稀れにしか障害が発生しないときは調査が困難となる。
このようなときに便利であるのは DMPCLPGM : CL プログラム・ダンプ というコマンドである。
パラメータは全く必要ない。DMPCLPGM が実行されれば、その時点でCLP の変数値がすべて
OUTQ: QGPL/QEZDEBUG に出力されるので簡単に原因を突き止めることができる。

【 例 】
ソースコード
----------------------------------------------------------------------
                   PGM
                    :

0017.00  SNDMSG:
0018.00              IF         COND(&TYPE *EQ '0') THEN(DO)
0019.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)
0020.00              ENDDO
0021.00              ELSE       CMD(DO)
0022.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)
0023.00              ENDDO
0023.01              DMPCLPGM       <------- DMPCLPGM の実行
0024.00              ENDPGM
----------------------------------------------------------------------
【 DMPCLPGM によって出力されたダンプの例 】
ソースコード
------------------------------------------------------------------------------------------------------------------------------
5722SS1 V5R4M0 060210                                 CLプログラムのダンプ           S652DAEC 10/04/15  19:02:36       ページ   
 ジョブ名 . . . . . . . . :   QPADEV0002   ユーザー名 . . . . . . . :   QTR           ジョブ番号 . . . . . . . :   490754        
 プログラム名 . . . . . . :   CHKIFS       ライブラリー . . . . . . :   TEST.COM      ステートメント . . . . . :   2400          
 モジュール名   . . . . . :   CHKIFS       プロシージャー名   . . . :   CHKIFS                                                   
                                                            メッセージ                                                           
             メッセージ                            メッセージ              送信元                       送信先                   
 時刻        ID               重大度     タイプ    テキスト                プログラム       命令        プログラム       命令    
  (プログラムのメッセージ待ち行列にメッセージが見つかりません)                                                                 
                                                               変数                                                              
 変数                   タイプ      長さ           値                             値  (16 進数)                                 
                                                   *...+....1....+....2....+     * . . . + . . . . 1 . . . . + . . . . 2 . . .   
&DIR                     *CHAR          256       '/AS400-NET.USR/AB.HTM    '    61C1E2F4F0F060D5C5E34BE4E2D961C1C24BC8E3D4004   
                                    +26           '                         '    404040404040404040404040404040404040404040404   
                                    +51           '                         '    404040404040404040404040404040404040404040404   
                                    +76           '                         '    404040404040404040404040404040404040404040404   
                                    +101          '                         '    404040404040404040404040404040404040404040404   
                                    +126          '                         '    404040404040404040404040404040404040404040404   
                                    +151          '                         '    404040404040404040404040404040404040404040404   
                                    +176          '                         '    404040404040404040404040404040404040404040404   
                                    +201          '                         '    404040404040404040404040404040404040404040404
                                    +226          '                         '    404040404040404040404040404040404040404040404
                                    +251          '      '                       404040404040                                 
&DIR_PTR                 *PTR            16                                      8000000000000000E132317729009600             
&FALSE                   *INT             4       -1                             FFFFFFFF                                     
&NULL                    *CHAR            1       ' '                            00                                           
&O_RDONLY                *INT             4        1                             00000001                                     
&RES                     *INT             4       -1                             FFFFFFFF                                     
&RES_PTR                 *PTR            16                                      8000000000000000E1323177290093D4             
-----------------------------------------------------------------------------------------------------------------------------
【 解説 】

この例では CLP の変数 &DIR の最後に NULL (X'00') が付加されているかを確認するために
出力したダンプである。確かに文字列の最後には 00 という NULL値が付加されていることがわかる。