The NoteBook of EricKong

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

          一個簡單的例子而已。

          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 閱讀(867) 評論(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  回復  更多評論
            

          主站蜘蛛池模板: 仙居县| 驻马店市| 临泉县| 高青县| 九江市| 台湾省| 邮箱| 五原县| 西峡县| 延津县| 资源县| 石泉县| 敦煌市| 太白县| 洪江市| 孝昌县| 普陀区| 玉田县| 遵义县| 大田县| 内丘县| 锡林浩特市| 罗平县| 恩平市| 隆化县| 德江县| 调兵山市| 临夏市| 温州市| 儋州市| 巍山| 稷山县| 凌源市| 靖安县| 双牌县| 开江县| 浪卡子县| 黄大仙区| 津南区| 丰宁| 吕梁市|