The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(11)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          一個簡單的例子而已。

          IDENTIFICATION DIVISION.                            
          PROGRAM-ID.    AMBCDBTD.                            
          ENVIRONMENT DIVISION.                               
          CONFIGURATION  SECTION.                             
          SOURCE-COMPUTER. IBM-9000.                          
          OBJECT-COMPUTER. IBM-9000.                          
          INPUT-OUTPUT SECTION.                               
          FILE-CONTROL.                                       
           
          DATA  DIVISION.                                     
          FILE SECTION.   
          ….                                   
          WORKING-STORAGE SECTION.                            
          01 NAME-TABLE.                                  
             03 WK-NAME                    OCCURS 3 TIMES.
                05 FNAME                    PIC X(12).    
                05 LNAME                    PIC X(12).    
          01 WK-INDEX                       PIC 9(1).     
          …..
          /*很明顯索引越界
          PERFORM VARYING WK-INDEX FROM 1 BY 1 UNTIL WK-INDEX > 4
           MOVE 'LEYOND'           TO FNAME(WK-INDEX)(1:6)        
           MOVE WK-INDEX           TO FNAME(WK-INDEX)(7:1)        
           MOVE 'LIN'              TO LNAME(WK-INDEX)(1:3)        
           MOVE WK-INDEX           TO LNAME(WK-INDEX)(4:1)        
           END-PERFORM.
          程序編譯自然沒有問題,這是邏輯問題,編譯器無法檢查。所以順利通過。

          接下來寫一個簡單的JOB:

          //AMBCDBTD EXEC PGM=AMBCDBTD                
          //SYSOUTPT INCLUDE MEMBER=SYSOUTPT
          你把這個job丟出去,報錯3000。錯誤信息如下:

          The reference to table WK-NAME by verb number 01 on line 000140 address an area outside the region of the table, From compile unit AMBCDBTD at entry point AMBCDBTD at compile unit offset +0000073C at entry offset +0000073C at address 16F01054.

          這里我們看到信息中的offset,它告訴錯位位置在程序AMBCDBTD中的偏移量,那么我們找到剛才編譯AMBCDBTD的信息,搜索073c,找到結果如下:

          000140  MOVE        

          000704  F270 D108 8058          PACK  264(8,13),88(1,8)

          000738  4110 A2B2               LA    1,690(0,10)

          00073C  0DEF                   BASR  14,15

          說明MOVE語句出現了問題,我們繼續查找看看是哪行出問題了,找到MOVE左邊的000140,搜索得到:

          000140      1    MOVE ‘LEYOND’  TO  FNAME(WK-INDEX)(1:6)

          這樣的話比較清楚了,很容易能察覺到wk-index超出了FNAME表的界限。

          posted on 2013-07-29 17:23 Eric_jiang 閱讀(866) 評論(3)  編輯  收藏 所屬分類: Mainframe

          Feedback

          # re: 如何調試Cobol程序 2013-07-29 17:33 Eric_jiang
          http://www.codecho.com/hitachi-cobol2002-download/  回復  更多評論
            

          # re: 如何調試Cobol程序 2013-07-29 18:31 Eric_jiang
          http://blog.csdn.net/dy1818dy/article/details/8185740  回復  更多評論
            

          # re: 如何調試Cobol程序 2013-07-30 18:49 Eric_jiang
          http://www.broculos.net/2007/11/as400-chapter-8-display-files.html  回復  更多評論
            

          主站蜘蛛池模板: 额敏县| 永兴县| 柳江县| 莱州市| 集贤县| 留坝县| 修武县| 石棉县| 阳泉市| 边坝县| 革吉县| 武义县| 呼玛县| 黄山市| 荃湾区| 治多县| 万源市| 苍山县| 桐柏县| 汾阳市| 芷江| 孟津县| 馆陶县| 通海县| 南宫市| 华坪县| 吕梁市| 十堰市| 金川县| 兴和县| 南康市| 长沙县| 田林县| 科技| 金溪县| 文登市| 会东县| 赤水市| 稻城县| 建始县| 潢川县|