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이 지정되어 있지 않은 경우에 발생한다.