OFCOBOL 런타임 에러
본 장에서는 OFCOBOL에서 발생하는 런타임 에러의 종류에 대해 설명한다.
1. 개요
OFCOBOL 컴파일러로 컴파일된 파일은 실행 파일이나 공유 라이브러리 파일로 사용된다.
이때 OFCOBOL 런타임 라이브러리를 통해 실행된 COBOL 파일은 런타임 동작 시 예외 동작에 대한 에러 메시지를 출력한다.
2. 런타임 에러
다음은 OFCOBOL에서 발생하는 런타임 에러와 그에 대한 설명이다.
에러 메시지 | 설명 |
---|---|
TEXTCON is not linked |
TEXTCON을 링크하지 않고 실행하는 경우 발생한다. |
openframe_date invalid |
OpenFrame으로부터 받은 날짜 형식이 올바르지 않은 경우 발생한다. |
clock_gettime() failed |
clock_gettime()을 통해 OpenFrame으로부터 OPENFRAME_TIME을 받지 못했을 때 발생한다. |
Packed decimal data’s hexa value is [HEXA] |
Usage COMP-3(Packed Decimal)에 Packed Decimal 형식이 아닌 값이 있을 때 값을 가져오는 경우 발생한다. 아래와 같이 Packed Decimal 형식이 아닌 값을 COMP-3에 MOVE 한 경우, 해당 값에 접근할 때 Assertion이 발생한다. 01 VAR. 05 VAR-2 PIC 9999 COMP-3. 01 VAR-3 PIC 9999 COMP. MOVE X'AAAAAA' TO VAR. VE VAR-2 TO VAR-3. --enable-hexa-packed, --expanded 옵션을 사용할 경우, Packed Decimal 테이블이 다르기 때문에 Assertion이 발생하지 않는다. |
" [NAME]'s index is over than max min range (index : [NUM] ) |
OCCURS DEPENDING ON 구문 사용 시 최대 최소 범위를 벗어나는 인덱스 값이 주어진 경우에 발생한다. 인덱스 체크는 OFCOBOL 컴파일 시 --check-index 옵션을 사용했을 때만 Assertion이 발생하고, 옵션을 사용하지 않았을 경우에는 경고 메시지만 출력된다. 컴파일 시 --check-index 옵션을 사용한 경우, 아래와 같은 코드는 Assertion이 발생한다. 01 VA PIC 9(4) OCCURS 2 TIMES. MOVE 123 TO VA(3). |
Reference-modifier’s count is bigger than taget size |
Reference modifier로 지정한 값이 타깃의 크기보다 큰 경우에 발생하며, 오버플로우가 일어날 수 있음을 경고하는 메시지이다. --check-index 옵션을 사용했을 때만 Assertion이 발생한다. 01 VAR PIC XXXX. MOVE "TEST" TO VAR(1:7). |
Can’t find $OPENFRAME_HOME |
환경변수에 OPENFRAME_HOME이 지정되어 있지 않은 경우 발생한다. |
Can’t find libofdebug.so |
ofdebug 라이브러리를 찾을 수 없는 경우에 발생한다. |
Divisor is zero |
Divisor(제수)가 0인 경우 발생한다. --expanded 옵션을 사용했을 때는 0으로 나눠도 정상 동작하며 결과 값은 0으로 assign 한다. 01 A PIC 9999 VALUE 0. 01 B PIC 9999 VALUE 10. 01 C PIC 9999 VALUE 0. COMPUTE A = B / C. |
OFCOBOL PERFORM OVERFLOW ERROR |
PERFORM Statement 사용 시 PERFORM을 exit 하지 않고 중첩하여 계속 사용하는 경우에 발생한다. (기본 최대 스택 : 32) |
EntryPoint [NAME] is not Found |
CALL Statement 실행 시 호출 대상 프로그램을 찾을 수 없는 경우에 발생한다. |
Can’t find PROSORT_HOME |
환경변수에 PROSORT_HOME이 지정되어 있지 않은 경우에 발생한다. |