PL/I 프로그램 디버깅

아래의 주제에서는 Debug Tool을 사용하여 PL/I 프로그램을 디버깅하는 방법을 설명합니다.

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

PL/I 명령의 Debug Tool 서브세트

아래의 테이블에는 PL/I 명령의 Debug Tool 해석 가능한 서브세트가 설명되어 있습니다. 이 서브세트는 Debug Tool에서 인식하는 명령의 목록이며 이러한 명령은 해당 PL/I 명령의 구문 및 액션과 매우 유사하거나 구문 및 액션을 복제합니다. 이 명령 서브세트는 현재 프로그래밍 언어가 PL/I인 경우에만 유효합니다.

명령 설명
Assignment 스칼라 및 벡터 지정
BEGIN 컴포지트 명령 그룹화
CALL Debug Tool 프로시저 호출
DECLARE 또는 DCL 세션 변수 선언
DO 반복 루핑 컴포지트 명령 그룹화
IF 조건부 실행
ON 예외 핸들러 정의
SELECT 조건부 실행

PL/I 언어문

PL/I문은 Debug Tool 명령으로 입력됩니다. Debug Tool을 사용하면 각 언어마다 서로 비슷한 방식으로 명령을 실행할 수 있습니다.

다음 유형의 Debug Tool 명령은 PL/I문의 구문을 지원합니다.

표현식
이 명령은 표현식을 평가합니다.
블록
BEGIN/END, DO/END, PROCEDURE/END

이 명령은 임의의 수의 Debug Tool 명령을 하나의 명령으로 그룹화하는 방법을 제공합니다.

조건부
IF/THEN, SELECT/WHEN/END

이 명령은 표현식을 평가하고 결과 값에 따라 Debug Tool 명령의 실행 플로우를 제어합니다.

선언
DECLARE 또는 DCL

이 명령은 세션 변수 선언을 위한 방법을 제공합니다.

루핑
DO/WHILE/UNTIL/END

이 명령은 반복 루프 또는 조건 루프를 Debug Tool 명령으로 프로그래밍하는 방법을 제공합니다.

제어 이동
GOTO, ON

이 명령은 명령 그룹의 실행 플로우를 비조건부로 변경하는 방법을 제공합니다.

아래의 테이블에서는 현재의 프로그래밍 언어가 PL/I일 경우 이번 Debug Tool 릴리스에서 새로 추가되거나 변경된 명령을 표시합니다.

명령 설명 또는 변경
ANALYZE 표현식 평가의 PL/I 양식과 마지막 및 중간 결과의 정밀도와 배율을 표시합니다. Debug Tool은 Enterprise PL/I 프로그램에 대해 이 명령을 지원하지 않습니다.
ON PL/I 조건을 피연산자로 사용한다는 점을 제외하고 AT OCCURRENCE 명령처럼 실행됩니다.
BEGIN 논리의 BEGIN/END 블록
DECLARE 세션 변수에는 COMPLEX (CPLX), POINTER, BIT, BASED, ALIGNED, UNALIGNED 등이 포함될 수 있습니다. 배열은 상위 및 하위 바운드를 갖도록 선언될 수 있습니다. 변수는 정밀도 및 배율을 가질 수 있습니다. Enterprise PL/I 프로그램을 디버깅할 때는 배열 및 구조를 선언할 수 없습니다.
DO 세 가지 형식의 DO가 추가되었습니다. 그 중 하나는 C의 do를 확장한 것입니다.
  1. DO; 명령(하나 이상); END;
  2. DO WHILE | UNTIL expression; 명령(하나 이상); END;
  3. DO 참조=스펙; 명령(하나 이상); END;
IF IF / ELSE에는 ENDIF가 필요하지 않습니다.
SELECT SELECT / WHEN / OTHERWISE / END 프로그래밍 구조가 추가되었습니다.

PL/I에 대한 %PATHCODE 값

다음 표에서는 현재 프로그래밍 언어가 PL/I일 경우 Debug Tool 변수 %PATHCODE에 대해 가능한 값을 보여줍니다.

0 어텐션 인터럽트가 발생했습니다.
1 블록이 입력되었습니다.
2 블록이 종료됩니다.
3 제어가 레이블 상수에 도달했습니다.
4 제어가 CALL 또는 함수 참조의 결과로서 다른 곳으로 이동합니다.
5 제어가 CALL 호출 또는 함수 참조로부터 돌아옵니다. 리턴 코드가 포함된 경우 레지스터 15는 아직 저장되지 않습니다.
6 복합 DO문에 포함된 일부 논리가 실행됩니다.
7 IF..THEN 다음의 로직이 실행되려고 합니다.
8 ELSE 다음의 로직이 실행되려고 합니다.
9 select-group 내의 WHEN 다음의 로직이 실행되려고 합니다.
10 select-group 내의 OTHERWISE 다음의 로직이 실행되려고 합니다.

PL/I 조건 및 조건 처리

모든 PL/I 조건은 Debug Tool에 의해 인식됩니다. 이러한 조건은 AT OCCURRENCEON 명령과 함께 사용됩니다.

OCCURRENCE 중단점이 트리거되면, Debug Tool %CONDITION 변수가 다음 값을 보유합니다.

트리거된 조건 %CONDITION 값
AREA AREA
ATTENTION CEE35J
COND ( CC#1 ) CONDITION
CONVERSION CONVERSION
ENDFILE ( MF ) ENDFILE
ENDPAGE ( MF ) ENDPAGE
ERROR ERROR
FINISH CEE066
FOFL CEE348
KEY ( MF ) KEY
NAME ( MF ) NAME
OVERFLOW CEE34C
PENDING ( MF ) PENDING
RECORD ( MF ) RECORD
SIZE SIZE
STRG STRINGRANGE
STRINGSIZE STRINGSIZE
SUBRG SUBSCRIPTRANGE
TRANSMIT ( MF ) TRANSMIT
UNDEFINEDFILE ( MF ) UNDEFINEDFILE
UNDERFLOW CEE34D
ZERODIVIDE CEE349
주:
Enterprise PL/I 프로그램의 경우 다음 조건은 지원되지 않습니다.
주:
Debug Tool 조건 ALLOCATE는 PL/I 프로그램에서 제어된 변수에 대해 ALLOCATE문에 도달했을 때 ON ALLOCATE 조건을 발생시킵니다.

이러한 PL/I 언어 지향 명령은 Debug Tool에서 지원되는 모든 명령의 서브세트일 뿐입니다.

PL/I DBCS 자유 양식 형태로 명령 입력

명령문은 PL/I의 DBCS 자유 양식으로 입력할 수 있습니다. 즉 명령문은 제공된 명령문이 모호하지 않은 경우 자유롭게 시프트 코드를 사용할 수 있습니다.

다음과 같이 LIST NAMES의 설명 또는 특성을 변경할 수 있습니다.

LIST NAMES  db<.c.skk.w>ord

이것은 다음을 검색합니다.

<.D.B.C.Skk.W.O.R.D>

이 경우 각 언어에 따라 다른 동작을 야기합니다. 예를 들어 다음은 C에서 a<kk>b를 찾고 PL/I에서 <.Akk.b>를 찾습니다.

LIST NAMES a<kk>*

여기서, <kk>는 shiftout-kanji-shiftin입니다.

자유 양식은 구문 분석기에 추가되고 현재 프로그래밍 언어가 PL/I인 경우에 계속 유효합니다.

TEST(ERROR, ...) 런타임 옵션이 유효할 때 PL/I 프로그램용 Debug Tool 초기화

런타임 옵션인 TEST(ERROR, ...)를 사용하면 다음의 경우에만 Debug Tool을 초기화할 수 있습니다.

LIST STORAGE PL/I 명령에 대한 Debug Tool 향상

LIST STORAGE address가 향상되어 addressPOINTER, Px 상수 또는 ADDR 기본 제공 함수가 될 수 있습니다.

Debug Tool 세션 변수에 대한 PL/I 지원

PL/I는 모든 Debug Tool 스칼라 세션 변수를 지원합니다. 또한 배열 및 구조를 선언할 수도 있습니다.

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

PL/I 프로그램 변수 액세스

Debug Tool은 컴파일러에서 작성한 기호 테이블에 포함된 정보를 사용하여 이름으로 프로그램 변수에 대한 정보를 얻습니다. 기호 테이블은 TEST(SYM)로 컴파일하여 컴파일러에서 사용 가능하게 됩니다.

Debug Tool은 기호 테이블을 사용하여 프로그램 변수, 제어된 변수, 자동 변수, 프로그램 제어 상수(파일 및 항목 상수, CONDITION 조건 이름 등) 등에 대한 정보를 얻습니다. 기본 변수, 제어된 변수, 자동 변수 및 매개변수는 프로그램에서 저장소가 할당된 후에만 Debug Tool과 함께 사용할 수 있습니다. 그 예외는 DESCRIBE ATTRIBUTES이며, 이는 변수의 속성을 표시하는 데 사용할 수 있습니다.

다음 데이터 유형 중 하나를 기본으로 한 변수가 표현식에서 사용될 때 명시적으로 규정되어야 합니다.

예를 들어, 다음 선언을 작성했다고 가정하십시오.

DECLARE P1 POINTER;
DECLARE P2 POINTER BASED(P1);
DECLARE DX FIXED BIN(31) BASED(P2);

해당 변수는 이름으로 직접 참조할 수 없습니다. 다음 중 하나를 지정하는 경우에만 참조할 수 있습니다.

P2->DX
  또는
P1->P2->DX

다음 유형의 프로그램 변수는 Debug Tool과 함께 사용할 수 없습니다.

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

PL/I 구조 액세스

이 주제의 예제는 PAYROLL이라고 하는 구조에 대해 다음 선언을 가정합니다.

Declare 1 Payroll(100),
          2 Name,
            4 Last       char(20),
            4 First      char(15),
          2 Hours,
            4 Regular    Fixed Decimal(5,2),
            4 Overtime   Fixed Decimal(5,2);

배열에 10번째 요소를 표시하려면 다음 명령을 입력하십시오.

LIST PAYROLL(10);

Debug Tool에 다음 결과가 표시됩니다.

LIST PAYROLL ( 10 );
PAYROLL.NAME.LAST(10)='Johnson             '
PAYROLL.NAME.FIRST(10)='Eric                '
PAYROLL.HOURS.REGULAR(10)='40'
PAYROLL.HOURS.OVERTIME(10)='0'

배열에 31번째 요소의 이름과 성을 표시하려면 다음 명령을 입력하십시오.

LIST PAYROLL.NAME(31);

Debug Tool에 다음 결과가 표시됩니다.

LIST PAYROLL.NAME ( 31 );
PAYROLL.NAME.LAST(31)='Rivers              '
PAYROLL.NAME.FIRST(31)='Doug                '

구조에 있는 각 요소의 순서로 배열의 모든 요소를 표시하려면 다음 명령을 입력하십시오.

LIST PAYROLL;

Debug Tool에는 목록을 압축하기 위해 이 목록에서 추가 정보를 제거했다는 것을 표시하기 위해 사용되는 말줄임표(...)로 다음 목록과 유사한 결과를 표시합니다.

LIST PAYROLL;
PAYROLL.NAME.LAST(1)='Smith               '
PAYROLL.NAME.LAST(2)='Ramirez             '
PAYROLL.NAME.LAST(3)='Patel               '
...
PAYROLL.NAME.LAST(100)='Li                  '
PAYROLL.NAME.FIRST(1)='Jason               '
PAYROLL.NAME.FIRST(2)='Ricardo             '
PAYROLL.NAME.FIRST(3)='Aisha               '
...
PAYROLL.NAME.FIRST(100)='Xian                '
PAYROLL.HOURS.REGULAR(1)='40'
PAYROLL.HOURS.REGULAR(2)='40'
PAYROLL.HOURS.REGULAR(3)='40'
...
PAYROLL.HOURS.REGULAR(100)='40'
PAYROLL.HOURS.OVERTIME(1)='0'
PAYROLL.HOURS.OVERTIME(2)='2'
PAYROLL.HOURS.OVERTIME(3)='3'
...
PAYROLL.HOURS.OVERTIME(100)='0'

정보가 메모리에 저장되는 순서로 배열의 모든 요소를 표시하려면 다음 명령을 입력하십시오.

SET LIST BY SUBSCRIPT ON;
LIST PAYROLL;

Debug Tool에는 목록을 압축하기 위해 이 목록에서 추가 정보를 제거했다는 것을 표시하기 위해 사용되는 말줄임표(...)로 다음 목록과 유사한 결과를 표시합니다.

LIST PAYROLL;
PAYROLL.NAME.LAST(1)='Smith               '
PAYROLL.NAME.FIRST(1)='Jason               '
PAYROLL.HOURS.REGULAR(1)='40'
PAYROLL.HOURS.OVERTIME(1)='0'
PAYROLL.NAME.LAST(2)='Ramirez             '
PAYROLL.NAME.FIRST(2)='Ricardo             '
PAYROLL.HOURS.REGULAR(2)='40'
PAYROLL.HOURS.OVERTIME(2)='2'
PAYROLL.NAME.LAST(3)='Patel               '
PAYROLL.NAME.FIRST(3)='Aisha               '
PAYROLL.HOURS.REGULAR(3)='40'
PAYROLL.HOURS.OVERTIME(3)='3'
...
PAYROLL.NAME.LAST(100)='Li                  '
PAYROLL.NAME.FIRST(100)='Xian                '
PAYROLL.HOURS.REGULAR(100)='40'
PAYROLL.HOURS.OVERTIME(100)='0'

PL/I 표현식의 Debug Tool 평가

현재의 프로그래밍 언어가 PL/I인 경우 표현식 해석은 PL/I 언어 요소는 Debug Tool에서 지원하지 않는다는 점을 제외하고 PL/I 언어에 정의된 것과 비슷합니다.

Debug Tool 표현식은 PL/I 표현식과 비슷합니다. 명령의 소스가 가변 길이 레코드 소스(예: 터미널)이고 표현식이 한 행을 넘어 확장되는 경우 연속 문자(SBCS 하이픈)는 마지막 행만 제외하고 모든 행의 끝에 지정되어야 합니다.

Debug Tool은 사용자 작업 시 PL/I 프로그램의 ENTRY 위치를 지날 때까지 PL/I 표현식을 평가할 수 없습니다.

모든 PL/I 상수 유형과 추가적으로 Debug Tool PX 상수가 지원됩니다.

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

지원되는 PL/I 기본 제공 함수

Debug Tool은 PL/I for MVS & VM에 대해 다음과 같은 기본 제공 함수를 지원합니다.

ABS
ACOS
ADDR
ALL
ALLOCATION
ANY
ASIN
ATAN
ATAND
ATANH
BINARYVALUE
BINVALUE1
BIT
BOOL
CHAR
COMPLETION
COS
COSD
COSH
COUNT

CSTG2
CURRENTSTORAGE
DATAFIELD
DATE
DATETIME
DIM
EMPTY
ENTRYADDR
ERF
ERFC
EXP
GRAPHIC
HBOUND
HEX
HIGH
IMAG
LBOUND
LENGTH
LINENO
LOG

LOG1
LOG2
LOW
MPSTR
NULL
OFFSET
ONCHAR
ONCODE
ONCOUNT
ONFILE
ONKEY
ONLOC
ONSOURCE
PLIRETV
POINTER
POINTERADD
POINTERVALUE
PTRADD3
PTRVALUE
4
REAL
REPEAT
SAMEKEY
SIN
SIND
SINH
SQRT
STATUS
STORAGE
STRING
SUBSTR
SYSNULL
TAN
TAND
TANH
TIME
TRANSLATE
UNSPEC
VERIFY

주:
  1. BINARYVALUE의 약어
  2. CURRENTSTORAGE의 약어
  3. POINTERADD의 약어
  4. POINTERVALUE의 약어

Debug Tool은 Enterprise PL/I에 대해 다음과 같은 기본 제공 함수를 지원합니다.

ACOS
ADDR
ADDRDATA
ALLOCATION3
ASIN
ATAN
ATAND
ATANH
BIF_DIM
BINARYVALUE
BINVALUE
COPY1
COS
COSD
COSH
COUNT
DATAFIELD
DATE1
DATETIME1
DIMENSION
ENDFILE
ENTRYADDR1,2
ERF
ERFC
EXP
FILEOPEN
GAMMA
HBOUND
HEX

HEXIMAGE
HIGH1
IAND
IEOR
IOR
INDEX
INOT
ISRL
ISLL
LBOUND
LENGTH
LINENO
LOG
LOG10
LOG2
LOGGAMMA
LOW1
LOWER2
LOWERCASE1
MAXLENGTH
NULL
OFFSET
OFFSETADD
OFFSETSUBTRACT
OFFSETDIFF

OFFSETVALUE
ORDINALNAME
ORDINALPRED
ORDINALSUCC
ONCODE
ONCONDCOND
ONCHAR
ONGSOURCE
ONSOURCE
ONCONDID
ONCOUNT
ONFILE
ONKEY
ONLOC
PAGENO
POINTER
PTR
POINTERADD
PTRADD
POINTERSUBTRACT
PTRSUBTRACT

POINTERDIFF
PTRDIFF
POINTERVALUE
PTRVALUE
PLIRETV
RAISE2
REPEAT1
SAMEKEY
SEARCH
SEARCHR
SIN
SIND
SINH
SQRT
SUBSTR1
SYSNULL
TAN
TAND
TANH
TALLY
TIME1
TRANSLATE1
UNSPEC1
UPPERCASE1
VERIFY
VERIFYR

주:
  1. 기본 제공 함수 COPY, DATE, DATETIME, ENTRYADDR, HIGH, LOW, LOWERCASE, REPEAT, SUBSTR, TIME, TRANSLATE, UNSPEC 및 UPPERCASE를 사용하려면 z/OS® 버전 1 릴리스 6에서 실행 중인 경우 APAR PQ94347의 Language Environment 런타임 PTF를 적용해야 합니다.
  2. Debug Tool에서 ENTRYADDR 기본 제공 함수에 대해 유사 변수는 지원되지 않습니다.
  3. z/OS 버전 1 릴리스 6 또는 버전 1 릴리스 7에서 실행 중인 경우 ALLOCATION 기본 제공 함수를 사용하려면 APAR PK16316의 Language Environment 런타임 PTF를 적용해야 합니다.

Debug Tool은 Enterprise PL/I에 대해 다음과 같은 기본 제공 함수를 지원하지 않습니다.

ABS
ALL
ANY
BIT
BOOL
CHAR
COMPLETION
CSTG(2)
CURRENTSTORAGE
DEFINE STRUCTURE

EMPTY
GRAPHIC
IMAG
MPSTR
REAL
STATUS
STORAGE
STRING

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

기본 제공 함수와 함께 SET WARNING PL/I 명령 사용

Debug Tool SET WARNING 명령 설정이 ON이고 기본 제공 함수(BIF)가 평가될 때 특정 검사가 수행됩니다.

이러한 검사는 SET WARNING OFF를 실행하여 제거할 수 있는 제한사항입니다.

지원되지 않는 PL/I 언어 요소

다음 목록은 사용할 수 없는 PL/I 함수를 요약한 것입니다.

OS PL/I 프로그램 디버깅

OS PL/I 프로그램을 디버그하는 방법에 관한 제한사항은 VS COBOL II 및 OS PL/I에서 CODE/370 사용, SC09-1862-01에 설명되어 있습니다.

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

Enterprise PL/I 프로그램 디버깅 시 제한사항

Enterprise PL/I 프로그램을 디버깅하는 경우 다음 명령은 사용할 수 없습니다.

Enterprise PL/I 프로그램을 디버깅하는 경우 다음 제한사항이 적용됩니다.