ABAP 디버깅·실행이 안 될 때 - Update/System Debugger와 RFC 실행 함정

ABAP 디버깅·실행이 안 될 때 배너

브레이크포인트를 걸었는데 안 멈춘다면

분명 브레이크포인트를 걸었는데 디버거가 그 지점을 그냥 지나치는 경우가 있습니다. 대표적인 원인은 그 코드가 메인 세션이 아닌 다른 처리 컨텍스트(업데이트 태스크, 시스템 프로그램 등)에서 실행되기 때문입니다.

이럴 때는 디버거 안에서 디버거 설정(Settings)을 열고 아래 두 옵션을 체크한 뒤 다시 진행해 봅니다.

System Debugging

시스템 프로그램(타입 S)·표준 프레임워크 내부까지 디버거가 멈추도록 합니다.

Update Debugging

COMMIT WORK 시점에 비동기 업데이트 태스크(CALL FUNCTION ... IN UPDATE TASK)로 넘어간 로직까지 따라가 멈춥니다.

특히 데이터가 실제로 DB에 반영되는 업데이트 태스크 안(FORM/FM) 에 브레이크포인트를 걸어야 하는데 안 멈춘다면, Update Debugging을 켜는 것이 핵심입니다.

디버거 설정에서 System/Update Debugging 체크 예시

디버거 설정에서 두 옵션을 체크한 모습. (라벨·경로는 버전에 따라 다를 수 있음)

TIP

디버거 메뉴 경로(예: Settings / Change Debugger Profile/Settings)와 라벨은 클래식/뉴 디버거, 그리고 SAP 버전에 따라 다를 수 있으니 실제 시스템에서 확인하세요.

RFC로 Call Transaction을 실행하면 덤프가 난다면

배치/인터페이스에서 RFC를 통해 CALL TRANSACTION(또는 BDC) 으로 표준 트랜잭션을 실행하려다 아래와 같은 덤프를 만나는 경우가 있습니다.

1Exception condition "CNTL_ERROR" triggered.

원인은 해당 트랜잭션이 GUI 컨트롤(Custom Control 등 프런트엔드 GUI)을 필요로 하기 때문입니다. RFC 세션에는 연결된 SAP GUI(프런트엔드)가 없으므로, GUI 컨트롤을 생성하려는 순간 CNTL_ERROR가 발생합니다.

RFC 실행GUI 없음→ CNTL_ERROR 덤프
vs
SAP GUI 실행GUI 있음→ 정상 처리

즉, GUI 컨트롤을 사용하는 트랜잭션은 RFC(백그라운드/무 GUI) 환경에서는 그대로 실행할 수 없고, SAP GUI가 붙은 세션에서 실행해야 합니다. 인터페이스를 설계할 때 대상 트랜잭션이 프런트엔드 컨트롤에 의존하는지 미리 확인하고, 그렇다면 BAPI 등 GUI에 의존하지 않는 처리 방식으로 대체하는 것이 안전합니다.

정리

  • 브레이크포인트가 안 잡히면 디버거 설정에서 System Debugging / Update Debugging을 켜 본다. 특히 업데이트 태스크 내부는 Update Debugging이 필수.
  • RFC로 CALL TRANSACTION을 돌릴 때 나는 CNTL_ERROR 는 GUI 컨트롤을 못 만들어서 나는 것 — GUI가 붙은 세션에서 실행하거나 BAPI로 대체한다.

Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.