2013-06-14 4 views
2

오류 메시지와 함께 스풀에 주어진 오프셋 (예 : offset +00007D0A at address 1515CD0A)에서 비정상 종료 (SO4C와 같은)를 유발하는 정확한 행 번호를 찾을 수있는 방법이 있습니까?Abend Causing Line

답변

10

프로그램이 OFFSET, NOLIST 옵션으로 컴파일 된 경우 프로그램의 시작 부분에서 "오프셋"을 포함하는 출력 목록에 verb/line number 목록이 표시됩니다. 비정규직에서보고 된 "오프셋"과 가장 비슷하지만 그보다 작은 오프셋을 가진 목록의 줄 번호는보고 싶은 곳입니다.

NOOFFSET, LIST를 사용하면 컴파일 목록에 "generated assembler"가 생기고 abend "offset"은 생성 된 명령어 중 하나의 "offset"과 정확하게 일치해야합니다. COBOL 소스 행을 쉽게 식별 할 수 있도록 실제 기계 명령어가 나열되기 전에 행 번호가있는 첫 번째 동사입니다.

드문 경우지만 프로그램 코드를 덮어 쓰고 결국 비정상 종료가 발생하면 더 열심히해야하지만 "보통"비정상 종료의 경우 매우 간단합니다.

컴파일러 옵션 NOLIST, NOOFFSET을 사용하는 경우 단서가 없습니다. 컴파일 된 옵션 중 하나를 사용하여 컴파일을 다시 실행하십시오. 프로그램 크기가 인 경우 일 경우, 이상 종료 작업을 다시 실행하십시오.

LIST, OFFSET을 사용하면 컴파일러에서 진단 메시지를 생성하므로 유효한 옵션 중 하나를 선택해야합니다. LIST와 OFFSET은 상호 배타적입니다.

+0

주의해야 할 점은 S04C와 같은 일부 비정상 종료는 DSNHLI에 의해 호출되는 (이 경우) DB2 루틴에 의해 생성되므로 오프셋이 의미가 없을 수 있음을 의미합니다. 예를 들어, 프로그램 개체. 그러나 CEEDUMP는 스택의 마지막 호출 지점을 표시합니다 (다시 S04C, DSNHLI 또는 유사).이 번호를 사용하여 오류를 생성 한 호출의 위치를 ​​확인할 수 있습니다. – zarchasmpgmr

+0

@ zarchasmpgmr, 귀하의 요점이 질문과 어떤 관련이 있는지 모르겠습니다. 제공된 태그가 혼란 스럽지만 (DB2, CICS, REXX) ​​그 시점에 COBOL 프로그램에서 평범한 비정상 종료 이외의 것임을 나타내는 것은 없습니다. COBOL 프로그램 외부에있는 주소/오프셋의 경우 프로그램 제어가 "어떻게되었는지"를 알아내는 과정에 분명히 다른 프로세스가 있습니다. 아마도 나는 그것을 놓쳤지만 수백 가지의 가능성에 대해 언급 할 필요는 없었습니다. –

+0

Bill, 그는 S04C가 DB2를 가리키며 정의상 COBOL 소스의 컴파일러 생성 코드 밖에 있다고 언급했습니다. 고전적인 S0Cx abends는 컴파일 된 코드에있을 것이고 오프셋 계산은 프로그램에 포함됩니다. – zarchasmpgmr