전체 화면 모드로 COBOL 프로그램 디버깅

COBOL에 대한 기본 디버깅 태스크에 대한 설명은 다음 COBOL 프로그램을 참조하십시오.

예제: 디버깅을 위한 샘플 COBOL 프로그램

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

예제: 디버깅을 위한 샘플 COBOL 프로그램

아래 프로그램은 디버깅 태스크를 보여 주기 위해 다양한 주제에서 사용됩니다.

이 프로그램은 두 개의 하위 프로그램을 호출하여 대출 금액과 현금 흐름 시리즈의 장래 가치를 계산합니다. 여러 COBOL 고유 함수를 사용합니다.

Main program COBCALC

      **********************************************************
      * COBCALC                                                *
      *                                                        *
      * A simple program that allows financial functions to    *
      * be performed using intrinsic functions.                *
      *                                                        *
      **********************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. COBCALC.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  PARM-1.
           05  CALL-FEEDBACK  PIC XX.
       01  FIELDS.
           05  INPUT-1           PIC X(10).
       01  INPUT-BUFFER-FIELDS.
           05  BUFFER-PTR        PIC 9.
           05  BUFFER-DATA.
               10  FILLER        PIC X(10)  VALUE "LOAN".
               10  FILLER        PIC X(10)  VALUE "PVALUE".
               10  FILLER        PIC X(10)  VALUE "pvalue".
               10  FILLER        PIC X(10)  VALUE "END".
           05  BUFFER-ARRAY    REDEFINES BUFFER-DATA
                               OCCURS 4 TIMES
                                 PIC X(10).

 PROCEDURE DIVISION.
           DISPLAY "CALC Begins." UPON CONSOLE.
           MOVE 1 TO BUFFER-PTR.
           MOVE SPACES TO INPUT-1.
      * Keep processing data until END requested
           PERFORM ACCEPT-INPUT UNTIL INPUT-1 EQUAL TO "END".
      * END requested
           DISPLAY "CALC Ends." UPON CONSOLE.
           GOBACK.
      * End of program.

      *
      * Accept input data from buffer
      *
       ACCEPT-INPUT.
           MOVE BUFFER-ARRAY (BUFFER-PTR) TO INPUT-1.
           ADD 1 BUFFER-PTR GIVING BUFFER-PTR.
      * Allow input data to be in UPPER or lower case
           EVALUATE FUNCTION UPPER-CASE(INPUT-1)     CALC1              
	   WHEN "END"
               MOVE "END" TO INPUT-1
             WHEN "LOAN"
               PERFORM CALCULATE-LOAN
             WHEN "PVALUE"
               PERFORM CALCULATE-VALUE
             WHEN OTHER
               DISPLAY "Invalid input: " INPUT-1
           END-EVALUATE.
      *
      * Calculate Loan via CALL to subprogram
      *
       CALCULATE-LOAN.
           CALL "COBLOAN" USING CALL-FEEDBACK.
           IF CALL-FEEDBACK IS NOT EQUAL "OK" THEN
             DISPLAY "Call to COBLOAN Unsuccessful.".
      *
      * Calculate Present Value via CALL to subprogram
      *
       CALCULATE-VALUE.
           CALL "COBVALU" USING CALL-FEEDBACK.
           IF CALL-FEEDBACK IS NOT EQUAL "OK" THEN
             DISPLAY "Call to COBVALU Unsuccessful.".

Subroutine COBLOAN

      **********************************************************
      * COBLOAN                                                *
      *                                                        *
      * A simple subprogram that calculates payment amount     *
      * for a loan.                                            *
      *                                                        *
      **********************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. COBLOAN.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  FIELDS.
           05  INPUT-1           PIC X(26).
           05  PAYMENT           PIC S9(9)V99 USAGE COMP.
           05  PAYMENT-OUT       PIC $$$$,$$$,$$9.99 USAGE DISPLAY.
           05  LOAN-AMOUNT       PIC S9(7)V99 USAGE COMP.
           05  LOAN-AMOUNT-IN    PIC X(16).
           05  INTEREST-IN       PIC X(5).
           05  INTEREST          PIC S9(3)V99 USAGE COMP.
           05  NO-OF-PERIODS-IN  PIC X(3).
           05  NO-OF-PERIODS     PIC 99 USAGE COMP.
           05  OUTPUT-LINE       PIC X(79).
       LINKAGE SECTION.
       01  PARM-1.
           05  CALL-FEEDBACK  PIC XX.
       PROCEDURE DIVISION USING PARM-1.
           MOVE "NO" TO CALL-FEEDBACK.
           MOVE "30000 .09 24 " TO INPUT-1.
           UNSTRING INPUT-1 DELIMITED BY ALL " "
             INTO LOAN-AMOUNT-IN INTEREST-IN NO-OF-PERIODS-IN.
      * Convert to numeric values
           COMPUTE LOAN-AMOUNT = FUNCTION NUMVAL(LOAN-AMOUNT-IN).
           COMPUTE INTEREST = FUNCTION NUMVAL(INTEREST-IN).
           COMPUTE NO-OF-PERIODS = FUNCTION NUMVAL(NO-OF-PERIODS-IN).
      * Calculate annuity amount required
           COMPUTE PAYMENT = LOAN-AMOUNT *
               FUNCTION ANNUITY((INTEREST / 12 ) NO-OF-PERIODS).
      * Make it presentable
           MOVE SPACES TO OUTPUT-LINE
           MOVE PAYMENT TO PAYMENT-OUT.
           STRING "COBLOAN:_Repayment_amount_for_a_" NO-OF-PERIODS-IN
                   "_month_loan_of_" LOAN-AMOUNT-IN
                   "_at_" INTEREST-IN "_interest_is:_"
               DELIMITED BY SPACES
               INTO OUTPUT-LINE.
           INSPECT OUTPUT-LINE REPLACING ALL "_" BY SPACES.
           DISPLAY OUTPUT-LINE PAYMENT-OUT.
           MOVE "OK" TO CALL-FEEDBACK.
           GOBACK.

Subroutine COBVALU

      **********************************************************
      * COBVALU                                                *
      *                                                        *
      * A simple subprogram that calculates present value      *
      * for a series of cash flows.                            *
      *                                                        *
      **********************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. COBVALU.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  CHAR-DATA.
           05  INPUT-1           PIC X(10).
           05  PAYMENT-OUT       PIC $$$$,$$$,$$9.99 USAGE DISPLAY.
           05  INTEREST-IN       PIC X(5).
           05  NO-OF-PERIODS-IN  PIC X(3).
           05  INPUT-BUFFER      PIC X(10) VALUE "5069837544".
           05  BUFFER-ARRAY   REDEFINES INPUT-BUFFER
                              OCCURS 5 TIMES
                                 PIC XX.
           05  OUTPUT-LINE       PIC X(79).
       01 NUM-DATA.
           05  PAYMENT           PIC S9(9)V99 USAGE COMP.
           05  INTEREST          PIC S9(3)V99 USAGE COMP.
           05  COUNTER           PIC 99 USAGE COMP.
           05  NO-OF-PERIODS     PIC 99 USAGE COMP.
           05  VALUE-AMOUNT   OCCURS 99 PIC S9(7)V99 COMP.
       LINKAGE SECTION.
       01  PARM-1.
           05  CALL-FEEDBACK  PIC XX.
       PROCEDURE DIVISION USING PARM-1.
           MOVE "NO" TO CALL-FEEDBACK.
           MOVE ".12 5 " TO INPUT-1.
           UNSTRING INPUT-1 DELIMITED BY "," OR ALL " "                VALU1 
            INTO INTEREST-IN NO-OF-PERIODS-IN.
      * Convert to numeric values
           COMPUTE INTEREST = FUNCTION NUMVAL(INTEREST-IN).            VALU2 
           COMPUTE NO-OF-PERIODS = FUNCTION NUMVAL(NO-OF-PERIODS-IN).
      * Get cash flows
           PERFORM GET-AMOUNTS VARYING COUNTER FROM 1 BY 1 UNTIL
             COUNTER IS GREATER THAN NO-OF-PERIODS.
      * Calculate present value
           COMPUTE PAYMENT =
               FUNCTION PRESENT-VALUE(INTEREST VALUE-AMOUNT(ALL) ).    VALU3 
      * Make it presentable
           MOVE PAYMENT TO PAYMENT-OUT.
           STRING "COBVALU:_Present_value_for_rate_of_"
                  INTEREST-IN "_given_amounts_"
                  BUFFER-ARRAY (1) ",_"
                  BUFFER-ARRAY (2) ",_"
                  BUFFER-ARRAY (3) ",_"
                  BUFFER-ARRAY (4) ",_"
                  BUFFER-ARRAY (5) "_is:_"
               DELIMITED BY SPACES
               INTO OUTPUT-LINE.
           INSPECT OUTPUT-LINE REPLACING ALL "_" BY SPACES.
           DISPLAY OUTPUT-LINE PAYMENT-OUT.
           MOVE "OK" TO CALL-FEEDBACK.
           GOBACK.
      *
      * Get cash flows for each period
      *
       GET-AMOUNTS.
           MOVE BUFFER-ARRAY (COUNTER) TO INPUT-1.
           COMPUTE VALUE-AMOUNT (COUNTER) = FUNCTION NUMVAL(INPUT-1).

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

COBOL에서 특정 루틴이 호출될 때 정지

이 주제에서는 AT CALL 또는 AT ENTRY 명령을 사용하여 루틴이 호출된 직후에 정지하는 방법을 설명합니다. 예제: 디버깅을 위한 샘플 COBOL 프로그램은 이 명령을 설명하는 데 사용됩니다.

AT CALL 명령을 사용하려면 TEST 컴파일러 옵션과 함께 호출 프로그램을 컴파일해야 합니다.

COBLOAN이 호출되기 직전에 정지하려면 다음 명령을 입력하십시오.

AT CALL COBLOAN ;

AT ENTRY 명령을 사용하려면 TEST 컴파일러 옵션과 함께 호출된 프로그램을 컴파일해야 합니다.

COBVALU가 호출된 직후에 정지하려면 다음 명령을 입력하십시오.

   AT ENTRY COBVALU ;

COBVALU가 호출된 직후 CALL-FEEDBACKOK인 경우에만 정지하려면 다음 명령을 입력하십시오.

AT ENTRY COBVALU WHEN CALL-FEEDBACK = "OK" ;

COBOL 프로그램이 중지한 명령문 식별

프로그램에 중단점을 여러 개 설정한 경우 프로그램이 중지된 위치를 Debug Tool이 식별하도록 하려면 다음 명령을 입력하십시오.

QUERY LOCATION

Debug Tool 로그 창에는 다음 예제와 비슷한 메시지가 표시됩니다.

QUERY LOCATION ;
STEP이 종료되어 프롬프트되었습니다.
프로그램이 현재 블록 COBVALU를 입력 중입니다.

COBOL 변수 값 수정

예제: 디버깅을 위한 샘플 COBOL 프로그램

단일 변수의 컨텐츠를 나열하려면 소스 창에서 변수명이 있는 곳으로 커서를 이동하고 PF4(LIST)를 누르십시오. 프로그램이 초기화된 기호 COBOL 변수가 초기화되기 전에 Debug Tool이 시작되므로 단계나 실행을 수행하기 전까지는 변수의 컨텐츠를 보거나 수정할 수 없습니다. 로그 창에 값이 표시됩니다. 이는 명령행에 LIST TITLED variable을 입력하는 것과 같습니다. 예를 들어,  CALC1  명령문까지 COBCALC 프로그램을 실행한 다음 Debug Tool 명령행에 AT 46 ; GO ; 를 입력하십시오. INPUT-1로 커서를 이동하고 LIST(PF4)를 누르십시오. 로그 창에 다음이 표시됩니다.

 LIST ( INPUT-1 ) ;
INPUT-1 = 'LOAN      '

INPUT-1의 값을 수정하려면 명령행에 다음을 입력하십시오.

MOVE 'pvalue' to INPUT-1 ;

명령행에 대부분의 COBOL 표현식을 입력할 수 있습니다.

PF2(STEP)를 눌러 COBVALU에 대한 호출로 step into한 다음  VALU2  명령문에 도달할 때까지 step하십시오. INTEREST 변수의 속성을 보려면 다음 Debug Tool 명령을 실행하십시오.

DESCRIBE ATTRIBUTES INTEREST ;

로그 창에 다음과 같은 결과가 표시됩니다.

속성: INTEREST
  길이: 4
  주소: 00011DC8
  02 COBVALU:>INTEREST   S999V99 COMP

이 액션을 사용하여 그룹 항목 및 데이터 계층을 간편하게 찾아볼 수 있습니다. 예를 들어, 다음 명령을 실행하여 CHAR-DATA 그룹에 대한 모든 초기 항목 값을 나열할 수 있습니다.

 LIST CHAR-DATA ;

로그 창에 다음과 같은 결과가 표시됩니다.

 LIST CHAR-DATA ;
02 COBVALU:>INPUT-1  of 01 COBVALU:>CHAR-DATA  = '.12 5     '
Invalid data for 02 COBVALU:>PAYMENT-OUT  of 01 COBVALU:>CHAR-DATA   is found.
02 COBVALU:>INTEREST-IN  of 01 COBVALU:>CHAR-DATA  = '.12  '
02 COBVALU:>NO-OF-PERIODS-IN  of 01 COBVALU:>CHAR-DATA  = '5  '
02 COBVALU:>INPUT-BUFFER  of 01 COBVALU:>CHAR-DATA  = '5069837544'
SUB(1) of 02 COBVALU:>BUFFER-ARRAY  of 01 COBVALU:>CHAR-DATA  = '50'
SUB(2) of 02 COBVALU:>BUFFER-ARRAY  of 01 COBVALU:>CHAR-DATA  = '69'
SUB(3) of 02 COBVALU:>BUFFER-ARRAY  of 01 COBVALU:>CHAR-DATA  = '83'
SUB(4) of 02 COBVALU:>BUFFER-ARRAY  of 01 COBVALU:>CHAR-DATA  = '75'
SUB(5) of 02 COBVALU:>BUFFER-ARRAY  of 01 COBVALU:>CHAR-DATA  = '44'
주:
LIST 명령을 사용하여 초기화되지 않은 변수 또는 올바르지 않은 데이터가 포함된 변수의 컨텐츠를 나열하면 Debug Tool에 INVALID DATA가 표시됩니다.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

조건이 true인 경우에만 COBOL 행에서 정지

대개 프로그램의 특정 부분이 처음에는 잘 작동하지만 특정 조건에서는 실패하는 경우가 많습니다. 이때 행 중단점을 설정하면 계속해서 GO를 입력해야 하므로 이 방법은 권장되지 않습니다.

예제: 디버깅을 위한 샘플 COBOL 프로그램

예를 들어, COBVALU에서, 할인율이 -1 이하일 경우에만 현재 가치를 계산할 때(예외가 발생하기 전에) 중지하려고 합니다. 이때는 먼저 COBCALC를 실행하고 COBVALU로 step into한 다음  VALU1  명령문에서 중지하십시오. 이렇게 하려면 COBCALC를 시작할 때 다음 Debug Tool 명령을 실행하십시오.

AT 67 ; GO ;
CLEAR AT 67 ; STEP 4 ;

이제 다음과 같이 중단점을 설정하십시오.

AT 44 IF INTEREST > -1 THEN GO ; END-IF ;

44행은  VALU3  명령문입니다. 이 명령을 실행하면 Debug Tool이 44행에서 중지합니다. INTEREST 값이 -1보다 크면 프로그램이 계속 실행됩니다. INTEREST 값이 -1 이하일 경우에만 이 명령을 실행하면 Debug Tool이 44행에서 중지합니다.

할인율을 강제로 음수 값으로 만들려면 다음 Debug Tool 명령을 입력하십시오.

MOVE '-2 5' TO INPUT-1 ;

GO 명령을 실행하여 프로그램을 실행하십시오. 이 명령을 실행하면 Debug Tool이 44행에서 정지합니다. LIST INTEREST 명령을 실행하여 INTEREST의 컨텐츠를 표시하십시오. 할인율이 양수일 경우 이 중단점을 설정했을 때의 결과를 보려면 새 디버그 세션을 시작하고 이 절에 설명된 Debug Tool 명령을 반복하십시오. MOVE '-2 5' TO INPUT-1 명령은 실행하지 마십시오. 이 명령을 실행하면 44행에서 프로그램 실행이 중지되지 않고 완료될 때까지 계속 실행됩니다.

일부분만 TEST를 사용하여 컴파일된 COBOL 디버깅

예제: 디버깅을 위한 샘플 COBOL 프로그램

COBVALU에 대한 시작점에 중단점을 설정하려 한다고 가정해 보십시오. COBVALU는 TEST를 사용하여 컴파일되었지만 다른 프로그램은 그렇지 않습니다. Debug Tool에 빈 소스 창이 표시됩니다. LIST NAMES CUS 명령을 사용하여 COBVALU 컴파일 단위가 Debug Tool에 알려졌는지 판별한 다음 AT APPEARANCE 또는 AT ENTRY 명령을 사용하여 적절한 중단점을 설정할 수 있습니다.

이 예제에서는 COBVALU에 대한 시작점에 중단점을 설정하는 대신 Debug Tool이 처음에 빈 소스 창을 표시할 때 STEP 명령을 실행합니다. Debug Tool은 TEST를 사용하여 컴파일된 첫 번째 루틴, 이 예제에서는 COBVALU에 대한 시작점에 도달할 때까지 프로그램을 실행합니다.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

시스템 콘솔에 COBOL I/O 캡처

일반적으로 시스템 콘솔에 나타나는 출력을 Debug Tool 터미널로 방향을 바꾸려면 다음 명령을 입력하십시오.

SET INTERCEPT ON CONSOLE ;

예제: 디버깅을 위한 샘플 COBOL 프로그램

예를 들어, COBCALC를 실행하고 Debug Tool SET INTERCEPT ON CONSOLE 명령 다음에 STEP 3 명령을 입력하여 실행하면 Debug Tool 로그 창에 다음 출력이 표시됩니다.

SET INTERCEPT ON CONSOLE ;
STEP 3 ;
CONSOLE : CALC Begins.

DISPLAY "CALC Begins." UPON CONSOLE문에 의해 CALC Begins. 절이 COBCALC에 표시됩니다.

SET INTERCEPT ON CONSOLE 명령은 시스템 콘솔에 출력을 캡처할 뿐만 아니라, 시스템 콘솔 대신 사용자의 Debug Tool 터미널에서 Debug Tool INPUT 명령을 사용하여 데이터를 입력할 수 있게 해 줍니다. 예를 들어, 실행될 다음 COBOL문이 ACCEPT INPUT-DATA FROM CONSOLE이면 Debug Tool 로그 창에 다음 메시지가 나타납니다.

CONSOLE : IGZ0000I AWAITING REPLY.
The program is waiting for input from CONSOLE.
Use the INPUT command to enter 114 characters for the intercepted
fixed-format file.

다음 Debug Tool 명령을 입력하여 입력 요청에 응답함으로써 실행을 계속하십시오.

INPUT some data ;
주:
Debug Tool이 시스템 콘솔 I/O를 차단할 때마다, 그리고 차단 중에 소스 창의 표시가 비어 있고 화면 맨 위의 세션 패널 헤더에 있는 위치 필드에 알 수 없음이 표시됩니다.

COBOL의 원시 스토리지 표시

LIST STORAGE 명령을 사용하여 변수의 스토리지를 표시할 수 있습니다. 예를 들어, BUFFER-DATA의 처음 12자에 대한 스토리지를 표시하려면 다음 명령을 입력하십시오.

LIST STORAGE(BUFFER-DATA,12)

데이터의 일부만 표시할 수도 있습니다. 예를 들어, 길이가 6자인 오프셋 4에서 시작하는 스토리지를 표시하려면 다음 명령을 입력하십시오.

LIST STORAGE(BUFFER-DATA,4,6)

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

COBOL 루틴 역추적 보기

대개 프로그래밍 오류가 발생하면 프로그래밍 오류를 야기한 것이 무엇인지, 특히 호출 순서의 역추적이 무엇인지 파악하려고 합니다. 이 정보를 보려면 다음 명령을 실행하십시오.

LIST CALLS ;

예제: 디버깅을 위한 샘플 COBOL 프로그램

예를 들어, 다음 명령과 함께 COBCALC 예제를 실행하십시오.

AT APPEARANCE COBVALU AT ENTRY COBVALU;
GO;GO;LIST CALLS;

그러면 로그 창에 다음과 같은 내용이 표시됩니다.

 AT APPEARANCE COBVALU
   AT ENTRY COBVALU ;
 GO ;
 GO ;
 LIST CALLS ;
At ENTRY in COBOL program COBVALU.
From LINE 67.1 in COBOL program COBCALC.

이는 호출자의 역추적을 표시합니다.

TEST를 사용하여 컴파일된 COBOL 코드의 런타임 경로 추적

프로그램을 변경할 필요없이 시작점과 종료점을 표시하여 프로그램을 추적하려면 파일이나 데이터셋에 다음 Debug Tool 명령을 배치한 다음 Debug Tool이 처음 프로그램을 표시할 때 이 명령을 사용하십시오. 다음 Debug Tool 명령이 포함된 PDS 멤버 USERID.DT.COMMANDS(COBCALC)를 가지고 있다고 가정하십시오.

* Commands in a COBOL USE file must be coded in columns 8-72.
* If necessary, commands can be continued by coding a '-' in
* column 7 of the continuation line.
 01 LEVEL PIC 99 USAGE COMP;
 MOVE 1 TO LEVEL;
 AT ENTRY * PERFORM;
   COMPUTE LEVEL = LEVEL + 1;
   LIST ( "Entry:", LEVEL, %CU);
   GO;
   END-PERFORM;
 AT EXIT * PERFORM;
   LIST ( "Exit:", LEVEL);
   COMPUTE LEVEL = LEVEL - 1;
   GO;
 END-PERFORM;

다음 명령을 입력하여 이 파일을 Debug Tool에 대한 명령 소스로 사용할 수 있습니다.

USE USERID.DT.COMMANDS(COBCALC)

USE 파일을 실행한 후 COBCALC를 실행하면 로그 창에 다음 추적 또는 이와 비슷한 내용이 표시됩니다.

ENTRY:
LEVEL = 00002
%CU = COBCALC
ENTRY:
LEVEL = 00003
%CU = COBLOAN
EXIT:
LEVEL = 00003
ENTRY:
LEVEL = 00003
%CU = COBVALU
EXIT:
LEVEL = 00003
ENTRY:
LEVEL = 00003
%CU = COBVALU
EXIT:
LEVEL = 00003
EXIT:
LEVEL = 00002

USE 파일을 작성하지 않으려면 명령행에서 명령을 입력하십시오. 이렇게 해도 동일한 결과가 나타날 수 있습니다.

COBOL 런타임 단락 추적 생성

실행이 전달될 때 경유한 단락의 이름을 표시하는 추적을 생성하려면 다음 예제에 나오는 Debug Tool 명령을 사용하십시오. Debug Tool 명령행에서 명령을 입력하거나 파일 또는 데이터셋에 명령을 배치할 수 있습니다.

예제: 디버깅을 위한 샘플 COBOL 프로그램

다음 Debug Tool 명령이 포함된 PDS 멤버 USERID.DT.COMMANDS
(COBCALC2)를 가지고 있다고 가정하십시오.

* COMMANDS IN A COBOL USE FILE MUST BE CODED IN COLUMNS 8-72.
* IF NECESSARY, COMMANDS CAN BE CONTINUED BY CODING A '-' IN
* COLUMN 7 OF THE CONTINUATION LINE.
 AT GLOBAL LABEL PERFORM;
   LIST LINES %LINE;
   GO;
 END-PERFORM;

Debug Tool이 처음 프로그램을 표시할 때 다음 명령을 입력하십시오.

USE USERID.DT.COMMANDS(COBCALC2)

USE 파일을 실행한 후 COBCALC를 실행하면 로그 창에 다음 추적 또는 이와 비슷한 내용이 표시됩니다.

            42       ACCEPT-INPUT.

      59       CALCULATE-LOAN.

      42       ACCEPT-INPUT.

      66       CALCULATE-VALUE.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      42       ACCEPT-INPUT.

      66       CALCULATE-VALUE.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      64       GET-AMOUNTS.

      42       ACCEPT-INPUT.

COBOL의 예기치 않은 스토리지 겹쳐쓰기 오류 찾기

프로그램이 실행되는 중에 일부 스토리지의 값이 예기치 않게 변경되어 이 값이 언제 어디서 변경되었는지 알아야 할 때가 있습니다. 다음 예제를 참조하십시오. 다음 예제에서는 호출자가 예상하는 것보다 프로그램이 더 많이 변경됩니다.

      05  FIELD-1     OCCURS 2 TIMES
                       PIC X(8).
   05  FIELD-2         PIC X(8).
 PROCEDURE DIVISION.
*                    ( An invalid index value is set )
     MOVE 3 TO PTR.
     MOVE "TOO MUCH" TO FIELD-1( PTR ).

다음 명령을 사용하여 FIELD-2의 주소를 찾으십시오.

DESCRIBE ATTRIBUTES FIELD-2

결과가 X'0000F559'라고 가정해 보십시오. 이 주소에서 시작하여 다음 8바이트에서 스토리지 값이 변경되었는지 감시하는 중단점을 설정하려면 다음 명령을 실행하십시오.

AT CHANGE %STORAGE(H'0000F559',8)

이 스토리지의 값이 변경된 경우, 프로그램이 실행될 때 Debug Tool이 정지됩니다.

COBOL에서 올바르지 않은 프로그램을 호출하기 전에 정지

정의되지 않은 프로그램을 호출하면 심각한 오류가 발생할 수 있습니다. 존재하지 않는 하위 프로그램을 호출하는 주 프로그램을 개발한 경우, 호출 직전에 Debug Tool이 정지하도록 설정할 수 있습니다. 예를 들어, NOTYET 하위 프로그램이 없으면 다음과 같이 중단점을 설정할 수 있습니다.

AT CALL (NOTYET)

이 중단점에서 Debug Tool이 중지하면 GO BYPASS 명령을 입력하여 이 호출을 생략할 수 있습니다. 이렇게 하면 오류 조건을 발생시키지 않고 디버그 세션을 계속할 수 있습니다.