GNU 코볼
글쎄, 그들은 할 수 없다고 말했다. 실제로, 나는 할 수 없다고 말한 사람이었습니다. 이제 끝났고 적용되는 방법을 사용하여 더 이상 사용되지 않는 언어 기능이 다시 구현되었습니다.
질문은 다음과 같이 말합니다.
코드 흐름을 방해하지 않는 추가 공백이나 명령문이 소스 코드에 추가되면 런타임에 반영해야합니다 (해당되는 경우 컴파일 후).
DISPLAY
출력을 시작 하게하는 3 초 이전에 임의의 양의 항목을 삽입 할 수 있으며 , s 이후 의 모든 항목 DISPLAY
은 "코드 흐름을 중단"하므로 괜찮습니다.
COBOL TRACE
은 소스 라인 번호가 실행될 때 (프로그램의 라인 번호에 액세스 할 수 없음) 단순히 나열한 동사 (문)를 가지고있었습니다. 제한된 사용에도 불구하고 TRACE 구현을 포함 시켰습니다.
ID Division.
Program-ID. HIWHERE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a b
.
Debug-Declaratives-Paragraph.
Display Debug-Line "!"
.
End Declaratives
.
Main-Program Section.
DISPLAY "Perform"
Display "Hello World, from line " no advancing Perform b
display "GO TO"
Display "Hello World, from line " no advancing GO TO a
.
a.
dISPLay "Fall through"
Display "Hello World, from line " no advancing. b.
The-Last-bit-OF-the-PROGRAM.
GOBACK
.
출력은
Perform
Hello World, from line 18!
GO TO
Hello World, from line 20!
Fall through
Hello World, from line 23!
언어 작성의 강력 함과 유연성을 보여주는이 예제에서는 대소 문자를 모두 사용하고 대소 문자를 모두 사용합니다. 처리 될 때 모든 것이 대문자로 "폴딩"되는 것은 중요하지 않습니다.
실행중인 프로그램에서 실행중인 프로그램의 소스 행 번호를 얻는 유일한 표준 COBOL 방법은입니다 DEBUGGING
DECLARATIVE
. 이내에SECTION
SECTION
그러한 선언문 , 엄격하게 단락 내의 단락 내 에서 특수 등록에 액세스 할 수 있습니다 DEBUG-LINE
. 여기에는 특정 프로 시저 이름 (단락 또는 SECTION
) 으로 제어를 전송 한 동사 (문)의 소스 행 번호가 포함 됩니다.
그래서 PERFORM
또는 GO TO
, 또는 "통과"를 사용하면 디버깅 선언의 단락 SECTION
이 실행됩니다.
확인하지만 DISPLAY
제어 전송을 유발하지는 않습니다.
문제 없어. 에 넣어제어 전송과 동일한 라인 .
"코드 흐름을 방해하지 않는 추가 공백이나 명령문이 소스 코드에 추가되면 런타임에 반영해야합니다 (해당되는 경우 컴파일 후).
따라서 같은 줄에 배치 하지만 제어 전송 앞에DISPLAY
두 부분으로 분할하십시오 ( "이 문맥에서 문자열을 출력하는 명령문의 첫 번째 행 번호를 원합니다"를 기억하십시오) ) 제어 제어를 전송하기 전에 첫 번째 부분을 출력하고 두 번째 부분을 DEBUG-LINE
디버깅 절차 내부에서 한 번에 출력합니다.
마지막으로 까다로운 비트는 "fall through"입니다 ( "procedures"는 PERFORM
ed, 대상이 GO TO
될 수 있거나 다음 행으로 간단히 입력 할 수 있음). 이 경우, DISPLAY
프로 시저를 정의하는 행을 정의 앞에 정의하십시오 .
"프로 시저"( a
및 b
) 의 이름 이과 ( 와 ) 동일한 소스 라인에 맞도록 크게 단축되었습니다 DISPLAY
. 엄밀히 말하면 COBOL procedure-name은 8 열에서 11 열로 시작해야합니다. 그러나 요즘 구문은 훨씬 완화되어 있습니다. 일부 코드와 동일한 행에 프로 시저 이름을 정의 할 수있는 범위까지. 코드에 내장되어 있습니다. 주의를 기울여야하고 가끔 멈추어야합니다.
에서 PROCEDURE DIVISION
표시되는 각 마침표가 필요하지 않습니다, 더 이상이다.
컴파일하기:
cobc -x -g hiwhere.cbl
(linux)를 실행하려면 :
COB_SET_DEBUG=Y ./hiwhere
마지막으로, TRACE의 리턴 (READY / RESET없이).
ID Division.
Program-ID. tRacE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a
.
Debug-Declaratives-Paragraph.
Display Debug-Line
.
End Declaratives
.
Main-Program Section.
* Just append "perform a" to a single-line statement.
DISPLAY "1" . perform a
Display "2" . perform a
display "3" . perform a
* Or prepend "perform a." for a multi-line statement, or a
* statement which won't "come back".
perform a. GOBACK
.
a.
CONTINUE
.
출력은 다음과 같습니다
1
17
2
18
3
19
20
여기서 1, 2 및 3은 세 개의 DISPLAY 문에서 출력되며 17, 18, 19 및 20은 "실행 가능"(비 디버깅) 행의 행 번호입니다.