COBOL 프로그램 디버깅

각각의 COBOL 컴파일러 버전은 COBOL 프로그램 개발에 도움이 되는 개선사항을 제공합니다. 이러한 개선사항을 통해 디버깅 기능의 레벨이 달라질 수 있습니다. 아래 주제에서는 COBOL 프로그램을 디버깅할 때 이러한 개선사항을 사용하는 방법에 대해 설명합니다.

COBOL 명령문과 유사한 Debug Tool 명령

COBOL 프로그램을 테스트하기 위해 COBOL 명령문과 유사한 디버깅 명령을 작성할 수 있습니다. Debug Tool은 해당 COBOL 명령문의 액션 및 구문과 중복되거나 아주 흡사한 COBOL 명령문의 해석 가능한 서브세트를 제공합니다. 따라서 익숙한 명령을 이용하여, 디버그 세션에서 개발한 소스 코드 프로그램 패치에 삽입할 수 있습니다.

아래 표는 Debug Tool이 인식할 수 있는 해석 가능한 COBOL 명령문의 서브세트를 보여줍니다.

명령 설명
CALL 서브루틴 호출
COMPUTE 계산 방식의 대입(표현식 포함)
선언 세션 변수 선언
EVALUATE 여러 방식의 전환
IF 조건부 실행
MOVE 비계산 방식의 대입
PERFORM 반복 루핑
SET INDEXPOINTER 지정

명령의 이러한 서브세트는 현재 프로그래밍 언어가 COBOL인 경우에만 유효합니다.

COBOL 명령 형식

터미널 또는 워크스테이션에서 직접 명령을 입력하는 경우 1열에서 시작하여 적절한 방법을 사용하여 긴 명령을 계속 입력할 수 있으므로 형식은 자유 형식이 됩니다. Debug Tool 세션에서 SBCS 하이픈(-)을 연속 문자로 사용하여 다음 행에 계속 입력할 수 있습니다.

그러나 파일을 명령 입력의 소스로 사용하는 경우 명령의 형식은 COBOL 컴파일러의 소스 형식과 비슷합니다. 처음 6자리는 무시되며, 이전 행에서 계속되는 행인 경우 7열의 SBCS 하이픈이 이를 나타냅니다. 명령 텍스트는 8열부터 입력할 수 있으며 72열에서 끝나야 합니다.

연속 행(7열에 하이픈이 있는 행)에는 선택적으로 하이픈 다음에 하나 이상의 공백이 올 수 있으며, 그 뒤에 계속되는 문자들이 나옵니다. 리터럴 문자열이 연속되는 경우에는 따옴표가 추가로 필요합니다. 계속되는 토큰이 리터럴 문자열이 아닌 경우, 이전 행에서 공백이 아닌 마지막 문자 뒤의 공백은 하이픈 뒤의 공백과 마찬가지로 무시됩니다.

Debug Tool이 명령을 로그 파일에 복사하면 명령은 위의 규칙에 따라 형식화되므로 이후의 Debug Tool 세션에서 로그 파일을 사용할 수 있습니다.

DBCS 이름 또는 리터럴 문자열 내에서는 연속이 허용되지 않습니다. 이 제한은 대화식 및 명령 파일 입력 모두에 적용됩니다.

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

Debug Tool 명령에 적용되는 COBOL 컴파일러 옵션

Debug Tool이 COBOL 명령과 동일하거나 비슷한 많은 명령을 사용할 수 있도록 허용하긴 하지만, Debug Tool이 반드시 이러한 명령을 사용자가 프로그램을 컴파일할 때 선택하는 컴파일러 옵션에 따라 해석하는 것은 아닙니다. 이는 Debug Tool 환경에서 다음 설정이 적용되기 때문입니다.

COBOL의 예약 키워드

Debug Tool에는 사용 가능한 COBOL 명령의 서브세트 외에도 COBOL에서 사용하고 인식할 수 있는 예약 키워드들이 있습니다. 이러한 키워드는 약어로 표시할 수 없거나, 변수명으로 사용할 수 없거나, 또는 다른 유형의 ID로 사용할 수 없습니다.

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

Debug Tool에서 COBOL 변수 사용

Debug Tool은 COBOL 언어에서 올바른 모든 변수 유형을 처리할 수 있습니다.

세션 중에 변수에 값을 지정하고 변수 값을 표시할 수 있을 뿐 아니라 테스트 요구에 맞게 세션 변수를 선언할 수도 있습니다.

예제: COBOL 변수에 값 지정

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

COBOL 변수 액세스

Debug Tool은 컴파일러가 작성한 기호 테이블에 포함된 정보를 사용하여 이름에 의해 프로그램 변수에 대한 정보를 얻습니다. TEST 컴파일러 옵션을 사용하여 컴파일하면 Debug Tool이 기호 테이블을 사용할 수 있습니다.

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

COBOL 변수에 값 지정

Debug Tool은 변수에 값을 지정할 때 사용하는 COBOL과 유사한 3개의 명령을 제공합니다. 이들 명령은 COMPUTE, MOVESET입니다. Debug Tool은 COBOL 규칙에 따라 값을 지정합니다. COMPUTE, MOVESET 명령의 수신측 및 소스에 대해 허용되는 값이 설명된 테이블은 Debug Tool Reference and Messages를 참조하십시오.

예제: COBOL 변수에 값 지정

COMPUTE, MOVESET 명령의 예제에서는 다음 COBOL 프로그램 세그먼트에 정의된 선언을 사용합니다.

01  GRP.
    02  ITM-1 OCCURS 3 TIMES INDEXED BY INX1.
        03  ITM-2 PIC 9(3) OCCURS 3 TIMES INDEXED BY INX2.
01  B.
    02  A     PIC 9(10).
01  D.
    02  C     PIC 9(10).
01  F.
    02  E     PIC 9(10)     OCCURS 5 TIMES.
77     AA          PIC X(5)     VALUE 'ABCDE'.
77     BB          PIC X(5).
        88         BB-GOOD-VALUE VALUE 'BBBBB'.
77     XX          PIC 9(9)    COMP.
77     ONE         PIC 99       VALUE 1.
77     TWO         PIC 99       VALUE 2.
77     PTR         POINTER.

TRUE 값을 BB-GOOD-VALUE에 지정합니다. 레벨-88 수신측에는 TRUE 값만 유효합니다. 예를 들면 다음과 같습니다.

SET BB-GOOD-VALUE TO TRUE;

(a + e(1))/c * 2 표현식의 결과를 xx 변수에 지정합니다.

COMPUTE xx =(a + e(1))/c * 2;

다음 예제에서 볼 수 있는 것처럼 이러한 지정에서는 테이블 요소도 사용할 수 있습니다.

COMPUTE itm-2(1,2)=(a + 1)/e(2); 

변수에 지정된 값은 항상 해당 변수의 스토리지에 지정됩니다. 최적화된 프로그램에서 변수는 임시로 레지스터에 지정될 수 있으며 이 변수에 지정된 새 값은 프로그램에서 사용되는 값을 변경하지 않습니다.

구조 b의 프로그램 변수 a를 구조 d의 프로그램 변수 c에 지정합니다.

MOVE a OF b TO c OF d;

이 예제에서 규정이 사용되었음에 유의하십시오.

값 123을 itm-2의 첫 번째 테이블 요소에 지정합니다.

MOVE 123 TO itm-2(1,1);

다음 두 예제에서 볼 수 있는 것처럼 변수에 값을 지정하기 위해 참조를 수정하여 사용할 수 있습니다.

MOVE aa(2:3)TO bb;
MOVE aa TO bb(1:4);

값 3을 itm-1의 색인인 inx1에 지정합니다.

SET inx1 TO 3;

inx1의 값을 inx2에 지정합니다.

SET inx2 TO inx1;

올바르지 않은 주소(nonnumeric 0)의 값을 ptr에 지정합니다.

SET ptr TO NULL;

XX의 주소를 ptr에 지정합니다.

SET ptr TO ADDRESS OF XX;

16진 값 X'20000'을 포인터 ptr에 지정합니다.

SET ptr TO H'20000';

COBOL 변수의 값 표시

변수의 값을 표시하려면 LIST 명령을 실행하십시오. LIST 명령을 사용하면 Debug Tool이 변수의 현재 값(요청된 경우, 이름까지)을 로깅하고 표시합니다. 예를 들어 변수 aa, bb, one 및 프로그램의 명령문 52에 있는 이들 각각의 값을 표시하려는 경우 다음 명령을 실행하십시오.

AT 52 LIST TITLED (aa, bb, one); GO;

Debug Tool은 명령문 52에 중단점을 설정하고(AT) 프로그램 실행을 시작한 다음(GO), 명령문 52에서 중지하여 변수명(TITLED) 및 값을 표시합니다.

둘 이상을 나열할 경우에는 변수 사이에 쉼표를 넣으십시오. LIST 명령을 실행할 때 변수명을 표시하지 않으려면 LIST TITLED 대신 LIST UNTITLED를 실행하십시오.

변수에 대해 표시되는 값은 항상 해당 변수의 스토리지에 저장되었던 값입니다. 최적화된 프로그램에서 변수는 레지스터로 임시 지정될 수 있으며 해당 변수에 대해 표시되는 값은 프로그램에 의해 사용된 값에 따라 달라질 수 있습니다.

LIST 명령을 사용하여 National 변수를 표시하는 경우 Debug Tool은 표시하기 전에 유니코드 데이터를 EBCDIC으로 변환합니다. 표시 불가능한 문자로 변환된 경우에는 LIST %HEX() 명령을 입력하여 변환되지 않은 유니코드 데이터를 16진 형식으로 표시하십시오.

COBOL에서 DBCS 문자 사용

Debug Tool을 사용하여 실행된 프로그램에는 2바이트 문자 세트(DBCS)로 기록된 변수 및 문자열이 포함될 수 있습니다. Debug Tool에서는 DBCS 변수 및 문자열이 포함된 명령을 실행할 수도 있습니다. 예를 들어, DBCS 변수의 값을 표시하거나(LIST), 새 값을 지정하거나, 모니터 창에서 모니터하거나(MONITOR) 또는 창에서 검색(FIND)할 수 있습니다.

Debug Tool에서 DBCS를 사용하려면 다음을 입력하십시오.

SET DBCS ON;

DBCS를 사용할 수 없는 터미널을 사용하여 전체 화면 모드에서 디버깅하는 경우에는 SET DBCS ON을 사용할 수 없습니다.

COBOL에 대한 DBCS 기본값은 OFF입니다.

Debug Tool 명령에서 DBCS 변수를 사용하기 위해 지켜야 하는 DBCS 구문 및 연속 규칙은 COBOL 언어와 동일합니다.

COBOL의 경우 값을 갱신하려면 모니터 또는 데이터 팝업 창에서 DBCS 값 앞에 G와 같은 DBCS 리터럴을 입력해야 합니다.

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

COBOL에 대한 %PATHCODE 값

아래 표에는 현재 프로그래밍 언어가 COBOL인 경우 Debug Tool 변수 %PATHCODE에 대해 가능한 값을 표시합니다.

–1 Debug Tool은 경로 또는 어텐션 상황의 결과로 제어 상태가 아닙니다.
0 어텐션 함수(ATTENTION 조건이 아님)
1 블록이 입력되었습니다.
2 블록이 종료됩니다.
3 프로그램에 코딩된 레이블(단락명 또는 섹션명)에 제어가 도달했습니다.
4 CALL 또는 INVOKE의 결과로 제어가 전달되고 있습니다. 호출된 루틴의 매개변수가 있는 경우, 준비되었습니다.
5 CALL 또는 INVOKE에서 제어가 리턴되고 있습니다. GPR 15에 리턴 코드가 있는 경우 이미 저장되었습니다.
6 인라인 PERFORM에 포함된 일부 로직이 실행되려고 합니다. 행 밖(out-of-line)의 PERFORM 범위는 단락 또는 섹션명으로 시작해야 하며 %PATHCODE = 3에 의해 식별됩니다.
7 IF...THEN 다음의 로직이 실행되려고 합니다.
8 ELSE 다음의 로직이 실행되려고 합니다.
9 EVALUATE 내의 WHEN 다음의 로직이 실행되려고 합니다.
10 EVALUATE 내의 WHEN OTHER 다음의 로직이 실행되려고 합니다.
11 SEARCH 내의 WHEN 다음의 로직이 실행되려고 합니다.
12 SEARCH 내의 AT END 다음의 로직이 실행되려고 합니다.
13 다음 구조 중 하나의 끝 뒤에 나오는 로직이 실행되려고 합니다.
  • IF 문(ELSE 절이 있거나 없음)
  • EVALUATE 또는 SEARCH
  • PERFORM
14 제어가 USE AFTER ERROR와 같은 선언 프로시저에서 리턴되려고 합니다. 선언 프로시저는 섹션명으로 시작해야 하며 %PATHCODE = 3에 의해 식별됩니다.
15 다음 절 중 하나와 연관된 로직이 실행되려고 합니다.
  • [NOT] ON SIZE ERROR
  • [NOT] ON EXCEPTION
  • [NOT] ON OVERFLOW
  • [NOT] AT END(SEARCH AT END 이외)
  • [NOT] AT END-OF-PAGE
  • [NOT] INVALID KEY
16 다음 절 중 하나가 포함된 명령문의 끝 뒤에 나오는 로직이 실행되려고 합니다.
  • [NOT] ON SIZE ERROR
  • [NOT] ON EXCEPTION
  • [NOT] ON OVERFLOW
  • [NOT] AT END(SEARCH AT END 이외)
  • [NOT] AT END-OF-PAGE
  • [NOT] INVALID KEY.
주:
프로그램이 경로 후크를 지원하는 옵션을 사용하여 컴파일된 경우에만 3–16 범위의 값이 %PATHCODE에 지정될 수 있습니다.

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

COBOL에서 세션 변수 선언

Debug Tool 세션에서 세션 변수를 선언할 수 있습니다. 관련 변수 지정 명령은 COBOL 언어와 비슷합니다. COBOL에서 변수명을 만들기 위해 사용된 규칙은 Debug Tool 세션의 세션 변수 선언에도 적용됩니다.

다음은 문자열 변수, 10진수 변수, 포인터 변수 및 부동 소수점 변수에 대한 선언입니다. description 문자열을 선언하려면 다음을 입력하십시오.

77 description      PIC X(25)

numbers 변수를 선언하려면 다음을 입력하십시오.

77 numbers          PIC 9(4) COMP

pinkie 포인터 변수를 선언하려면 다음을 입력하십시오.

77 pinkie           POINTER

shortfp 부동 소수점 변수를 선언하려면 다음을 입력하십시오.

77 shortfp          COMP-1

세션 변수는 전체 디버그 세션 내내 적용됩니다.

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

COBOL 표현식의 Debug Tool 평가

Debug Tool은 COBOL 표현식을 COBOL 규칙에 따라 해석합니다. 몇몇 제한사항이 적용됩니다. 예를 들어, 산술 연산식이 지정된 경우 다음 제한이 적용됩니다.

관계 조건에서 산술 연산식이 사용되는 경우 두 피비교수 속성이 모두 고려됩니다. 관계 조건은 EVALUATE 규칙이 아니라 IF 규칙을 따릅니다.

간단한 관계 조건만이 지원됩니다. 부호 조건, 클래스 조건, 조건 이름 조건, 전환 상태 조건, 복소수 조건 및 단축된 조건은 지원되지 않습니다. 관계 조건의 피비교수 중 하나가 산술 연산식 형태로 시작된 경우(더하기나 빼기 같은 연산자 사용) 부동 소수점 피연산자에 대한 제한이 두 피비교수 모두에 적용됩니다. IF 명령에 대해 허용되는 비교가 설명된 테이블에 대해서는 Debug Tool Reference and Messages의 내용을 참조하십시오. COBOL의 비교 규칙에 대한 설명은 Enterprise COBOL for z/OS Programming Guide를 참조하십시오.

창으로 된 날짜 필드는 관계 조건에서 지원되지 않습니다.

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

COBOL 표현식 평가 결과 표시

표현식의 결과를 표시하려면 LIST 명령을 사용하십시오. 예를 들어 표현식을 평가하여 그 결과를 로그 창에 표시하려면 다음을 입력하십시오.

LIST a + (a - 10) + one;

표현식에서 구조 요소를 사용할 수도 있습니다. e가 배열인 경우 다음 두 예제는 유효합니다.

LIST a + e(1) / c * two;

LIST xx / e(two + 3);

표현식 평가를 위한 조건은 프로그램 명령문의 조건과 동일합니다.

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

COBOL 표현식에서 상수 사용

Debug Tool 세션에서 문자열 상수를 하나의 피연산자로 사용하는 표현식뿐 아니라, 변수명이나 숫자 상수를 단일 피연산자로 포함하는 표현식을 사용할 수 있습니다. Enterprise COBOL for z/OS Language Reference에서 설명한 모든 COBOL 문자열 상수 유형이 Debug Tool에서 유효하지만, 다음과 같은 제한이 있습니다.

또한 Debug Tool은 주소를 나타내는 16진 상수의 사용을 허용합니다. 이 H-상수는 숫자-16진-문자 형식(따옴표(") 또는 어포스트로피(')로 구분되고 H가 앞에 나오는 16진 문자만)을 사용하여 16진수로 지정될 수 있는 전체 단어 값입니다. 이 값은 오른쪽으로 정렬되며 왼쪽은 0으로 채워집니다. 다음 예제는

LIST STORAGE (H'20cd0');

주어진 주소의 컨텐츠를 16진 형식으로 표시합니다. SET 명령과 함께 이 유형의 상수를 사용할 수 있습니다. 다음 예제는

SET ptr TO H'124bf';

16진 값 124bf를 변수 ptr에 지정합니다.

COBOL과 함께 Debug Tool 함수 사용

Debug Tool은 프로그램 변수 및 스토리지에 대한 자세한 정보를 찾는 데 사용할 수 있는 특정 함수를 제공합니다.

COBOL과 함께 %HEX 사용

%HEX 함수를 LIST 명령과 함께 사용하여 피연산자의 16진 값을 표시할 수 있습니다. 예를 들어, PIC 9(9)로 정의된 팩 형식의 10진수 pvar3에 대해 16진(또는 내부) 값이 1234인 값부터 외부 표현값을 표시하려면 다음을 입력하십시오.

LIST %HEX (pvar3);

로그 창에 16진 문자열 X'000001234'가 표시됩니다.

COBOL과 함께 %STORAGE 함수 사용

이 Debug Tool 함수를 사용하면 주소 및 길이로 스토리지를 참조할 수 있습니다. CHANGE 중단점을 설정할 때 참조로 %STORAGE 함수를 사용하여 스토리지의 특정 영역이 변경되는지 감시할 수 있습니다. 예를 들어, 16진 주소 22222의 8바이트 스토리지가 변경되는지 모니터하려면 다음을 입력하십시오.

AT CHANGE %STORAGE (H'00022222', 8)
   LIST 'Storage has changed at Hex address 22222'

COBOL에서 변수 규정 및 보기 지점 변경

자격 부여는 현재 실행 블록에 알려지지 않은 데이터를 조작할 수 있도록, 규정자를 사용하여 오브젝트를 지정하고 한 블록에서 다른 블록으로 보기 지점을 변경하는 방법입니다. 예를 들어, MOVE 5 TO x; 지정은 Debug Tool이 처리하기에 그다지 어려워 보이지 않습니다. 그러나 x라는 이름의 변수가 둘 이상 존재할 수 있습니다. 따라서 어떤 변수 x에 값 5를 지정할 것인지를 Debug Tool에 알려 줘야 합니다.

자격 부여를 사용하여 특정 변수가 속한 블록 또는 컴파일 단위를 지정할 수 있습니다. Debug Tool이 호출될 경우 현재 실행 중인 블록에 대한 기본 자격 부여가 설정되어 있습니다. 이 블록은 암시적으로 규정됩니다. 따라서 다른 블록의 모든 명령문 번호 및 변수명에 대한 참조를 명시적으로 규정해야 합니다. 하나 이상의 블록이나 컴파일 단위를 호출하는 컴파일 단위를 테스트하는 경우 반드시 이 작업이 필요합니다. 명령을 실행할 때 특정 명령문 번호나 변수명이 어떤 블록에 포함되어 있는지 지정해야 할 수도 있습니다.

COBOL에서 변수 규정

규정자는 보다 큼 기호(>), 콜론 및 COBOL 데이터 자격 부여 표기법, OF 또는 IN의 조합에 의해 구분된, 로드 모듈, 컴파일 단위, 블록, 섹션명 또는 단락명의 조합으로, 참조된 명령문 번호 또는 변수명이 뒤에 나옵니다.

블록 레벨에서 오브젝트를 규정할 경우 COBOL 형식의 데이터 자격 부여만을 사용하십시오. 데이터명이 고유하거나 GLOBAL로 정의된 경우 블록 레벨로 규정될 필요는 없습니다.

다음은 완전한 오브젝트입니다.

load_name::>cu_name:>block_name:>object;

필요한 경우 load_name은 로드 모듈의 이름입니다. 프로그램이 여러 개의 로드 모듈로 구성되어 있고 현재 로드 모듈이 아닌 다른 로드 모듈로 자격 부여를 변경하려는 경우 이는 필수입니다. load_name은 Debug Tool 변수 %LOAD일 수도 있습니다.

필요한 경우 cu_name은 컴파일 단위의 이름입니다. cu_name은 완전한 컴파일 단위 이름이어야 합니다. 현재 규정된 컴파일 단위가 아닌 다른 컴파일 단위로 자격 부여를 변경하려는 경우에만 이는 필수입니다. Debug Tool 변수 %CU일 수 있습니다.

필요한 경우 block_name은 블록명입니다. block_name은 자격 부여를 현재 규정된 블록 이외의 블록으로 변경할 경우에만 필요합니다. 이는 Debug Tool 변수 %BLOCK입니다. block_name이 대소문자를 구분하는 경우 블록명을 큰따옴표(") 또는 작은따옴표(') 안에 넣으십시오. 이름을 큰따옴표 또는 작은따옴표 안에 넣지 않으면 Debug Tool은 이름을 대문자로 변환합니다.

다음은 비슷한 2개의 COBOL 프로그램(블록)입니다.

MAIN

·
·
·
01 VAR1. 02 VAR2. O3 VAR3 PIC XX. 01 VAR4 PIC 99.. ****************MOVE commands entered here****************

SUBPROG

·
·
·
01 VAR1. 02 VAR2. O3 VAR3 PIC XX. 01 VAR4 PIC 99. 01 VAR5 PIC 99. ****************LIST commands entered here****************

자격 부여를 사용하여 mainsubprog 블록을 구분할 수 있습니다. main이 현재 실행 블록일 때 다음 MOVE 명령을 입력하고

MOVE 8 TO var4;
MOVE 9 TO subprog:>var4;
MOVE 'A' TO var3 OF var2 OF var1;
MOVE 'B' TO subprog:>var3 OF var2 OF var1;

subprog이 현재 실행 블록일 때 다음 LIST 명령을 입력하면

LIST TITLED var4;
LIST TITLED main:>var4;
LIST TITLED var3 OF var2 OF var1;
LIST TITLED main:>var3 OF var2 OF var1;

각각의 LIST 명령에 의해 로그 창에 다음 출력(주석 없이)이 표시됩니다.

VAR4 = 9;    /*  자격 부여가 없는 var4 가 현재 실행중인              */
             /*  블록(subprog)을 참조합니다.                         */
             /*  그러므로 LIST 명령은 9 값을 표시합니다.             */

MAIN:>VAR4 = 8     /*  var4는 기본에 규정되었습니다.                 */
                   /*  그러므로 LIST 명령은 8을 표시합니다.          */
                   /*  변수 값이 기본에 선언되었습니다.              */

VAR3 OF VAR2 OF VAR1 = 'B';
               /*  이 예제에서 var3의 자격 부여가 OF var2 OF var1    */
               /*  이지만, 현재 자격 부여에 대해 프로그램 자격       */
               /*  부여가 기본값이고 LIST 명령은 'B'를               */
               /*  표시하며 값이 subprog에                           */
               /*  선언되었습니다.                                   */

VAR3 OF VAR2 OF VAR1 = 'A'
               /*  var3이 var2 OF var1에 다시 규정되었지만           */
               /*  기본에 더욱 규정되었습니다.                       */
               /*  그러므로 LIST 명령은                              */
               /*  'A'를 표시하며 기본에 선언되었습니다.             */

명령 파일의 경우 변수를 규정하는 위의 방법이 필요합니다.

COBOL에서 보기 지점 변경

보기 지점은 보통, 현재 실행 중인 블록입니다. SET QUALIFY 명령으로 보기 지점을 변경하여 액세스할 수 없는 데이터에 접근할 수도 있습니다. SET 키워드는 선택적입니다. 예를 들어, 보기 지점(현재 실행)이 main에 있고 subprog에 선언된 변수를 사용하여 몇 개의 명령을 실행하려는 경우 다음을 실행하여 보기 지점을 변경할 수 있습니다.

QUALIFY BLOCK subprog;

그런 다음, 규정자를 사용하지 않고 subprog에 선언된 변수를 사용하여 명령을 실행할 수 있습니다. Debug Tool은 main 프로시저에 선언된 변수를 보지 않습니다. 예를 들어, 다음 지정 명령은 subprog 보기 지점에서는 유효합니다.

MOVE 10 TO var5;

그러나 보기 지점이 아직 subprog에 있는 동안 main에 있는 변수 값을 표시하려면 다음 예제와 같이 규정자를 사용해야 합니다.

LIST (main:>var-name);

보기 지점을 변경하는 위의 방법은 명령 파일의 경우 반드시 필요합니다.

COBOL 클래스 디버깅 시 고려사항

Enterprise COBOL for z/OS 및 OS/390, 버전 3 릴리스 1 이상을 사용하여 작성한 COBOL 클래스의 블록 구조는 COBOL 프로그램의 블록 구조와 다릅니다. COBOL 클래스의 블록 구조는 다음과 같은 점에서 차이가 납니다.

메소드는 FACTORY 블록 또는 OBJECT 블록에 속합니다. FACTORY 단락의 메소드에 대한 완전한 블록명은 다음과 같습니다.

class-name:>FACTORY:>method-name

OBJECT 단락의 메소드에 대한 완전한 블록명은 다음과 같습니다.

class-name:>OBJECT:>method-name

메소드의 중단점에 있는 경우 현재 규정된 블록이 메소드입니다. 매개변수 없이 LIST TITLED 명령을 입력하면 Debug Tool은 메소드와 연관된 모든 데이터 항목을 나열합니다. FACTORY 또는 OBJECT의 모든 데이터 항목을 나열하려면 다음 단계를 수행하십시오.

  1. QUALIFY 명령을 입력하여 보기 지점을 FACTORY 또는 OBJECT로 설정하십시오.
  2. LIST TITLED 명령을 입력하십시오.

예를 들어 ACCOUNT 클래스에 대한 모든 오브젝트 인스턴스 데이터 항목을 나열하려면 다음 명령을 입력하십시오.

QUALIFY BLOCK ACCOUNT:>OBJECT; LIST TITLED;

VS COBOL II 프로그램 디버깅

TEST 컴파일러 옵션으로 컴파일하고 Language Environment 라이브러리에 링크된 VS COBOL II 프로그램을 디버깅하는 데는 제한이 있습니다. CEETEST를 포함하여 Language Environment 호출 가능 서비스를 사용할 수 없습니다. 그러나 Language Environment 런타임은 사용해야 합니다.

Debug Tool은 다음 명령을 사용하여 사용자가 설정한 중단점에서 프로그램의 제어를 가져오지 않습니다.

그러나 VS COBOL II 이외의 프로그램을 호출하는 AT CALL 명령을 사용하여 중단점을 설정하면 Debug Tool은 프로그램의 제어를 가져옵니다. Debug Tool이 프로그램의 제어를 가져오기 위해 사용할 수 있는 중단점을 설정하려면 AT ENTRY *, AT EXIT *, AT GLOBAL ENTRYAT GLOBAL EXIT 명령을 사용하십시오.

시작점 및 종료 명령문에 설정한 중단점에는 이와 연관된 명령문이 없습니다. 따라서 이들 중단점은 컴파일 단위 레벨에서만 트리거됩니다. 중단점이 트리거되면 목록의 현재 보기가 맨 위로 이동하고 아무 명령문도 강조표시되지 않습니다. 시작점 및 종료 명령문에 설정한 중단점은 STEP 명령에 의해 무시됩니다.

VS COBOL II 프로그램을 원격 디버그 모드에서 디버깅하는 경우 COBOL 프로그램과 동일한 TEST 런타임 옵션을 사용하십시오.

VS COBOL II 프로그램 목록 찾기

VS COBOL II 컴파일러는 목록 데이터셋명을 오브젝트(로드 모듈)에 두지 않습니다. Debug Tool은 목록 데이터셋을 userid.CUName.LIST에서 찾으려고 합니다. 목록이 PDS에 있는 경우 다음 방법 중 하나를 사용하여 PDS 위치를 Debug Tool에 알려 주십시오.

VS COBOL II 프로그램 디버깅에 대한 자세한 정보는 Using CODE/370 with VS COBOL II and OS PL/I, SC09-1862를 참조하십시오.