ABAP 디버깅 완전 정복 (1) 기본편 – 디버거 켜고 한 줄씩 따라가기

ABAP 디버깅 시리즈

SAP를 처음 접하면 반드시 부딪히는 순간이 있습니다. 화면에 빨간 에러 메시지가 떴는데 왜 떴는지 알 수 없을 때, 금액이 이상하게 계산됐는데 어느 로직에서 틀어졌는지 감이 안 올 때입니다.

이럴 때 쓰는 도구가 ABAP 디버거(Debugger) 입니다. 프로그램을 한 줄씩 멈춰 세우고 그 순간의 변수 값을 눈으로 확인하게 해주는 도구죠. 개발자 전용 도구가 아니라, 원인 파악이 필요한 기능 컨설턴트에게도 필수입니다.

이번 1편에서는 오늘 바로 따라 할 수 있는 가장 기본적인 사용법을 다룹니다. 소스 코드를 몰라도 됩니다.


0. 시작하기 전 준비

필요한 권한

디버깅은 아무 계정에서나 되지 않습니다. 아래 권한 오브젝트가 필요합니다.

권한 오브젝트필드설명
S_DEVELOPACTVT = 03디버깅 화면 조회(Display)
S_DEVELOPACTVT = 02디버깅 중 변수 값 변경

권한이 없으면 /h를 입력해도 아무 반응이 없거나 권한 없음 메시지가 뜹니다. 이 경우 Basis 담당자에게 요청해야 합니다.

반드시 지켜야 할 원칙

  • 운영(PRD) 시스템에서는 조회 권한만 사용하세요. 변경 권한으로 값을 바꾸면 실제 전표가 잘못 생성될 수 있습니다.
  • 연습은 개발(DEV) 또는 테스트(QAS) 시스템에서 하세요.
  • 소스에 직접 넣는 브레이크포인트(BREAK-POINT)는 반드시 삭제 후 이관하세요. 운영에 반영되면 사용자 화면이 디버거로 넘어가는 대형 사고가 납니다.

1. 디버거의 종류부터 알고 갑시다

Classic Debugger (구 디버거)

  • 실행 중인 같은 세션 안에서 디버거가 열립니다.
  • 화면이 단순하고 가볍지만, 디버거가 세션을 점유해 다른 작업을 병행할 수 없습니다.
  • SAP 릴리즈 6.40 이전의 기본 디버거였습니다.

New Debugger (신 디버거) ← 현재 기본값

  • 별도의 외부 세션이 새로 열리면서 디버깅됩니다.
  • 프로그램 종류(리포트, 다이얼로그, 스마트폼 등)에 관계없이 사용 가능합니다.
  • 여러 개의 데스크톱 탭, 인터널 테이블 편집, 오브젝트 비교(Diff), 콜스택 분석 등 기능이 훨씬 많습니다.
  • SAP NetWeaver 7.00 이후 기본값입니다.

확인 방법: 디버거 진입 후 메뉴 Debugger → Change Debugger에서 전환할 수 있습니다. 특별한 이유가 없다면 New Debugger를 쓰세요.

ADT (Eclipse) Debugger

S/4HANA, CDS View, RAP 개발을 한다면 SAP GUI가 아니라 Eclipse + ABAP Development Tools에서 디버깅합니다. 여기서 찍는 브레이크포인트는 성격상 External Breakpoint에 해당해서, 백그라운드나 OData 호출까지 잡아낼 수 있습니다. 이 부분은 2편에서 더 자세히 다룹니다.


2. STEP 1 – 가장 쉬운 진입 방법 /h

초보자가 가장 먼저 익혀야 할 방법입니다. 소스 코드 위치를 몰라도 됩니다.

실습 순서

  1. 디버깅하고 싶은 트랜잭션을 실행합니다. (예: SE16 또는 VA03)
  2. 화면 왼쪽 위 커맨드 필드(트랜잭션 코드 입력하는 그 칸)에 /h를 입력하고 Enter를 누릅니다.
  3. 화면 하단에 Debugging switched on 메시지가 뜹니다.
  4. 이제 디버깅하고 싶은 동작(실행 버튼 클릭, 저장 클릭, Enter 등)을 수행합니다.
  5. 디버거 화면이 열립니다.

/h 계열 명령어 정리

명령어기능언제 쓰나
/h일반 디버깅 켜기대부분의 경우 이것만 쓰면 됩니다
/hs시스템 디버깅 + 업데이트 디버깅SAP 표준 프로그램, 시스템 프로그램 내부 추적
/ha화면 처리(PBO/PAI) 건너뛰고 디버깅다이얼로그 화면 로직이 너무 많아 방해될 때

핵심 포인트: /h는 “다음에 실행될 ABAP 코드에서 멈춰라”는 뜻입니다. 그래서 /h 입력 → Enter → 그 다음에 동작을 수행해야 합니다. 순서가 바뀌면 잡히지 않습니다.


3. STEP 2 – 디버거 화면 읽는 법

디버거가 열리면 복잡해 보이지만, 실제로는 크게 세 부분입니다.

① 상단 — 소스 코드 영역

현재 실행 중인 프로그램의 소스가 보이고, 노란 화살표(→) 가 “지금 막 실행하려는 줄”을 가리킵니다.

주의: 화살표가 가리키는 줄은 아직 실행되지 않은 줄입니다. 그 줄의 결과를 보려면 한 번 더 진행해야 합니다.

② 하단 — 변수 영역 (Variables)

확인하고 싶은 변수명을 직접 입력하거나, 소스 코드에서 변수를 더블클릭하면 자동으로 등록되고 현재 값이 표시됩니다.

③ 탭 구성

용도
Standard단일 변수 조회
Structures구조체(Structure) 필드별 조회
Tables인터널 테이블 내용 조회
Objects클래스 인스턴스, 오브젝트 참조 조회
Break./Watchpoints브레이크포인트/워치포인트 관리

Desktop 1/2/3 탭은 자주 쓰는 화면 조합을 저장해두는 개인 작업 공간입니다.

반드시 봐야 할 시스템 변수

변수의미
SY-SUBRC직전 명령 성공 여부. 0이면 성공, 0이 아니면 실패
SY-TABIXLOOP 중 현재 몇 번째 행인지
SY-UNAME현재 사용자 ID
SY-DATUM / SY-UZEIT현재 날짜 / 시간
SY-MSGID / SY-MSGNO메시지 클래스 / 메시지 번호

SY-SUBRC만 잘 봐도 “SELECT가 데이터를 못 찾았구나”, “READ TABLE이 실패했구나”를 바로 알 수 있습니다.


4. STEP 3 – 실행 제어 단축키 (F5, F6, F7, F8)

디버깅의 90%는 이 네 개로 끝납니다.

이름동작언제 쓰나
F5Single Step (Step Into)한 줄 실행. 서브루틴/메서드/펑션모듈이면 안으로 들어감로직을 처음부터 꼼꼼히 따라갈 때
F6Execute (Step Over)한 줄 실행. 서브루틴/펑션모듈은 통째로 실행하고 넘어감이미 검증된 표준 FM은 건너뛸 때
F7Return (Step Out)현재 서브루틴/메서드를 끝까지 실행하고 호출한 곳으로 복귀잘못 들어왔을 때 빠져나오기
F8Continue다음 브레이크포인트까지 쭉 실행. 없으면 프로그램 종료확인이 끝났을 때

초보자가 가장 많이 하는 실수

F5를 계속 눌러서 SAP 표준 코드 깊숙이 들어가 버리는 것입니다. 모르는 표준 FM을 만나면 F6, 실수로 들어갔으면 F7로 나오면 됩니다.

유용한 부가 기능: Goto Statement

특정 구문을 건너뛰거나 이전 줄로 되돌아가고 싶을 때가 있습니다.

  1. 이동하고 싶은 줄을 클릭
  2. 마우스 우클릭 → Goto Statement

단, IF 조건을 억지로 통과시키는 등 실제 흐름과 다르게 만들 수 있으니 원인 분석 용도로만 쓰세요.


5. STEP 4 – 첫 브레이크포인트 찍어보기

/h는 편하지만 “프로그램의 특정 지점”에서 멈추게 할 수는 없습니다. 그때 쓰는 게 브레이크포인트(중단점)입니다. 여기서는 가장 기본이 되는 두 가지만 다루고, 종류별 차이와 활용은 2편에서 이어집니다.

방법 A. 에디터에서 클릭 (가장 많이 쓰는 방법)

  1. SE38(리포트) 또는 SE80, SE37(펑션모듈)로 소스를 엽니다.
  2. 멈추고 싶은 줄에 커서를 놓습니다.
  3. 툴바의 정지 표시 아이콘(Set/Delete Breakpoint) 클릭 또는 Ctrl + Shift + F12
  4. 줄 왼쪽에 정지 아이콘이 생깁니다.
  5. F8로 프로그램을 실행하면 그 줄에서 자동으로 디버거가 열립니다.

중요: 브레이크포인트는 실행 가능한 줄에만 걸립니다. 주석(*, "), DATA/TYPES 같은 선언문, 빈 줄에는 걸리지 않습니다.

방법 B. 소스 코드에 직접 삽입 (Static Breakpoint)

abap

* 모든 사용자에게 항상 동작 — 매우 위험
BREAK-POINT.

* 지정한 사용자 ID에게만 동작 — 그나마 안전
BREAK punes.

실무에서는 권장하지 않습니다. 이관 전에 지우는 걸 잊으면 운영 사고로 직결됩니다. 굳이 쓴다면 BREAK <USER_ID> 형태를 쓰고, 이관 체크리스트에 삭제 항목을 넣어두세요.


6. STEP 5 – 값 확인하기

단일 변수

소스 코드에서 변수명을 더블클릭 → 하단 변수 영역에 자동 등록되고 값이 표시됩니다.

인터널 테이블

  1. Tables 탭 클릭
  2. 인터널 테이블명 입력 (예: LT_BSEG)
  3. Table Contents 영역에 행 데이터가 표시됩니다

또는 소스에서 인터널 테이블을 더블클릭해도 열립니다.

콜스택(Call Stack) 읽기

디버거 화면의 Call Stack 영역을 보면 “지금 이 코드가 어디서 호출됐는지”가 위에서 아래로 표시됩니다. 원인이 현재 위치가 아니라 호출한 쪽에 있는 경우가 많기 때문에, 습관적으로 확인하는 게 좋습니다. 스택 항목을 더블클릭하면 그 지점의 소스로 이동합니다.


7. 여기까지의 정리

1편에서 익힌 것은 이렇습니다.

  • 진입: /h 또는 에디터 브레이크포인트
  • 이동: F5 / F6 / F7 / F8
  • 확인: 변수 더블클릭, 상태 판단은 SY-SUBRC

이 세 가지만 손에 익어도 단순한 리포트의 흐름은 충분히 따라갈 수 있습니다. 지금 바로 개발 시스템에서 간단한 리포트를 하나 열어 /h를 입력하고 F5를 눌러보세요. 한 시간만 만져보면 감이 잡힙니다.

하지만 실무에서 마주치는 문제들, 예를 들어

  • 에러 메시지가 어디서 발생했는지 찾기
  • 변수 값이 어느 시점에 오염되는지 추적하기
  • 백그라운드 잡이나 RFC 인터페이스 디버깅하기

같은 상황은 기본 조작만으로는 해결되지 않습니다.

👉 2편 실전편 – 브레이크포인트·워치포인트와 상황별 디버깅 에서 이어집니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤