아래의 주제에서는 Debug Tool을 사용하여 PL/I 프로그램을 디버깅하는 방법을 설명합니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
아래의 테이블에는 PL/I 명령의 Debug Tool 해석 가능한 서브세트가 설명되어 있습니다. 이 서브세트는 Debug Tool에서 인식하는 명령의 목록이며 이러한 명령은 해당 PL/I 명령의 구문 및 액션과 매우 유사하거나 구문 및 액션을 복제합니다. 이 명령 서브세트는 현재 프로그래밍 언어가 PL/I인 경우에만 유효합니다.
| 명령 | 설명 |
|---|---|
| Assignment | 스칼라 및 벡터 지정 |
| BEGIN | 컴포지트 명령 그룹화 |
| CALL | Debug Tool 프로시저 호출 |
| DECLARE 또는 DCL | 세션 변수 선언 |
| DO | 반복 루핑 컴포지트 명령 그룹화 |
| IF | 조건부 실행 |
| ON | 예외 핸들러 정의 |
| SELECT | 조건부 실행 |
PL/I문은 Debug Tool 명령으로 입력됩니다. Debug Tool을 사용하면 각 언어마다 서로 비슷한 방식으로 명령을 실행할 수 있습니다.
다음 유형의 Debug Tool 명령은 PL/I문의 구문을 지원합니다.
이 명령은 임의의 수의 Debug Tool 명령을 하나의 명령으로 그룹화하는 방법을 제공합니다.
이 명령은 표현식을 평가하고 결과 값에 따라 Debug Tool 명령의 실행 플로우를 제어합니다.
이 명령은 세션 변수 선언을 위한 방법을 제공합니다.
이 명령은 반복 루프 또는 조건 루프를 Debug Tool 명령으로 프로그래밍하는 방법을 제공합니다.
이 명령은 명령 그룹의 실행 플로우를 비조건부로 변경하는 방법을 제공합니다.
아래의 테이블에서는 현재의 프로그래밍 언어가 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를 확장한 것입니다.
|
| IF | IF / ELSE에는 ENDIF가 필요하지 않습니다. |
| SELECT | SELECT / WHEN / OTHERWISE / END 프로그래밍 구조가 추가되었습니다. |
다음 표에서는 현재 프로그래밍 언어가 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 조건은 Debug Tool에 의해 인식됩니다. 이러한 조건은 AT OCCURRENCE 및 ON 명령과 함께 사용됩니다.
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 |
이러한 PL/I 언어 지향 명령은 Debug Tool에서 지원되는 모든 명령의 서브세트일 뿐입니다.
명령문은 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, ...)를 사용하면 다음의 경우에만 Debug Tool을 초기화할 수 있습니다.
LIST STORAGE address가 향상되어 address는 POINTER, Px 상수 또는 ADDR 기본 제공 함수가 될 수 있습니다.
PL/I는 모든 Debug Tool 스칼라 세션 변수를 지원합니다. 또한 배열 및 구조를 선언할 수도 있습니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
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과 함께 사용할 수 없습니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
이 주제의 예제는 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인 경우 표현식 해석은 PL/I 언어 요소는 Debug Tool에서 지원하지 않는다는 점을 제외하고 PL/I 언어에 정의된 것과 비슷합니다.
Debug Tool 표현식은 PL/I 표현식과 비슷합니다. 명령의 소스가 가변 길이 레코드 소스(예: 터미널)이고 표현식이 한 행을 넘어 확장되는 경우 연속 문자(SBCS 하이픈)는 마지막 행만 제외하고 모든 행의 끝에 지정되어야 합니다.
Debug Tool은 사용자 작업 시 PL/I 프로그램의 ENTRY 위치를 지날 때까지 PL/I 표현식을 평가할 수 없습니다.
모든 PL/I 상수 유형과 추가적으로 Debug Tool PX 상수가 지원됩니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
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 PTRVALUE4 |
REAL REPEAT SAMEKEY SIN SIND SINH SQRT STATUS STORAGE STRING SUBSTR SYSNULL TAN TAND TANH TIME TRANSLATE UNSPEC VERIFY |
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 |
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 |
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
Debug Tool SET WARNING 명령 설정이 ON이고 기본 제공 함수(BIF)가 평가될 때 특정 검사가 수행됩니다.
이러한 검사는 SET WARNING OFF를 실행하여 제거할 수 있는 제한사항입니다.
다음 목록은 사용할 수 없는 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에 알려 주십시오.
SET DEFAULT LISTINGS my.listing.pds
Enterprise PL/I 프로그램을 디버깅하는 경우 다음 명령은 사용할 수 없습니다.
Enterprise PL/I 프로그램을 디버깅하는 경우 다음 제한사항이 적용됩니다.