SAP에서 작업하다 보면 화면에 에러 메시지나 워닝이 떴는데, 그 메시지가 소스 코드 어디에서 발생하는지 알아내야 할 때가 있습니다. 메시지 텍스트로 코드를 찾자니 같은 텍스트가 여러 곳에 박혀 있을 수 있고, BAdI나 EXIT 안에서 발생한 거라면 위치 추적이 더 까다롭죠.
이때 가장 빠른 방법이 메시지 디버깅(Breakpoint at Message) 입니다. 메시지 ID와 번호만 알면 그 메시지가 호출되는 정확한 코드 위치에 디버거가 자동으로 멈춥니다.
메시지 디버깅이란?
ABAP 디버거의 조건부 브레이크포인트 기능 중 하나입니다. 일반 브레이크포인트가 "이 라인에서 멈춰" 라면, 메시지 브레이크포인트는 "이 메시지가 호출되는 순간 멈춰" 입니다.
원리:
- ABAP 코드의 모든 메시지는
MESSAGE구문으로 호출됨 - 메시지마다 클래스 ID(예:
ZMM) + 번호(예:001) 식별자가 있음 - 디버거에 이 두 값을 등록하면 → 해당 MESSAGE 구문 실행 시 자동으로 멈춤
메시지 ID·번호 확인하는 법
먼저 디버깅하고 싶은 메시지의 ID와 번호를 알아야 합니다.
방법 1 — 메시지 박스 클릭
화면에 메시지가 표시될 때 메시지 자체를 더블 클릭 또는 상세 정보(우측 ⓘ 아이콘) 클릭 → 다음 정보가 표시됩니다.
- 메시지 클래스: 예)
ZMM,M8 - 메시지 번호: 예)
001,456
표기 형태는 보통 메시지번호(클래스ID) 또는 클래스ID 메시지번호 입니다.
방법 2 — 메시지 위에 마우스 호버
대부분의 SAP GUI 화면에서는 메시지에 마우스를 잠깐 올리면 툴팁으로 ID + 번호가 표시됩니다.
방법 3 — SE91 으로 직접 조회
이미 알고 있는 메시지를 텍스트로 찾고 싶으면 T-Code SE91(Message Maintenance)에서 메시지 클래스 별 모든 메시지 목록 확인 가능.
디버깅 절차
1단계 — 디버거 진입
해당 메시지를 발생시키는 화면 또는 트랜잭션에서 명령창에 /h 입력 → 디버거 모드 활성화.
팝업 안이라 명령창이 없으면 텍스트 디버깅 글의 드래그 앤 드롭 방식 사용.
2단계 — 메시지 브레이크포인트 추가
디버거 화면에서 메뉴 → Breakpoints → Breakpoint at → Message 클릭. 또는 단축키.

3단계 — 메시지 ID·번호 입력
다이얼로그에 다음 입력:
| 필드 | 입력 값 |
|---|---|
| Message Class (ID) | 예: ZMM, M8, F5 |
| Message Number | 예: 001, 456 |
| Message Type (선택) | 비워두면 모든 타입(E/W/I/S)에서 멈춤 |
확인 누르면 메시지 브레이크포인트가 등록됩니다.
4단계 — 실행 계속
F8 을 눌러 실행을 계속합니다. 등록한 메시지가 호출되는 정확한 코드 위치에 자동으로 멈춥니다.

5단계 — 원인 분석
해당 위치에서:
- 어떤 조건으로 메시지가 발생하는지 (
IF조건 확인) - 어떤 변수 값이 문제인지
- 어느 BAdI/EXIT/표준 로직 안인지 호출 스택(Call Stack) 확인
콜 스택을 확인하면 상위 호출 흐름을 따라가서 근본 원인 파악 가능.
활용 케이스
표준 메시지가 어디서 발생하는지 모를 때
SAP 표준 트랜잭션에서 보이는 에러 메시지(예: M8 클래스의 인터컴퍼니 관련 메시지)는 코드가 SAP Standard 안에 깊이 박혀 있어 위치 찾기 어려움. 메시지 디버깅으로 정확한 위치 진입.
BAdI나 사용자 EXIT의 검증 로직 추적
회사 표준 BAdI에서 발생한 메시지가 어느 BAdI 구현체의 어느 라인인지 추적할 때.
인터페이스 송수신 에러
EAI/RFC 송수신 시 발생하는 메시지의 발생 위치를 확인해서 데이터·로직 둘 중 어느 쪽 문제인지 가르기.
주의사항
같은 메시지가 여러 곳에서 호출될 수 있음
하나의 메시지(예: M8/001)가 코드 내 여러 위치에서 호출될 수 있습니다. 메시지 브레이크포인트가 처음 멈춘 위치가 우리가 찾던 곳이 아닐 수 있으니, F8 로 계속 진행하면서 여러 번 멈출 수 있다는 점 인지.
메시지 타입 필터링
특정 타입(E=Error)에서만 멈추고 싶으면 다이얼로그의 Type 필드에 E 입력. 워닝까지 잡고 싶으면 W 도 추가.
세션 종료 시 자동 삭제
메시지 브레이크포인트는 세션 한정입니다. SAP 로그아웃 또는 GUI 재실행 시 사라지므로 매번 새로 등록해야 합니다. 자주 쓰는 메시지라면 외부 메모에 ID·번호 저장해두는 게 편함.
운영 환경에서는 익스터널 디버깅과 조합
운영 환경에서 본인 ID로 재현 안 되는 메시지를 추적하려면 메시지 디버깅 + 익스터널 디버깅을 함께 사용. 익스터널 디버깅으로 대상 사용자 세션에 들어간 뒤 메시지 브레이크포인트 등록.
요약
| 단계 | 작업 |
|---|---|
| 1 | 메시지 박스에서 클래스 ID + 번호 확인 |
| 2 | /h 로 디버거 진입 |
| 3 | Breakpoints → Breakpoint at → Message 메뉴 |
| 4 | 클래스 ID + 번호 입력 → 확인 |
| 5 | F8 로 실행 → 자동으로 메시지 발생 위치에 멈춤 |
| 6 | 콜 스택 + 조건문 분석으로 근본 원인 파악 |
메시지 디버깅은 "에러는 떴는데 어디서 발생하는지 모르겠다" 상황을 단 몇 클릭으로 해결해 주는 강력한 기법입니다. SAP 표준 트랜잭션의 깊은 곳에서 발생하는 메시지를 추적할 때 특히 빛을 발합니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. SAP 버전과 GUI 메뉴 위치에 따라 일부 절차가 다를 수 있으므로 적용 전 확인하시기 바랍니다.
'디버깅 & 트러블슈팅' 카테고리의 다른 글
| [SAP ABAP] 디버깅 중 원하는 라인으로 점프 — Goto Statement 사용법 (0) | 2026.05.12 |
|---|---|
| [SAP ABAP] Watchpoint 디버깅 — 변수 값 변화 추적으로 대량 데이터 한 건만 잡기 (0) | 2026.05.12 |
| [SAP ABAP] 텍스트 디버깅 & GUI 디버깅 — 팝업창에서도 디버거 켜는 트릭 (0) | 2026.05.12 |
| [SAP ABAP] 익스터널 디버깅(External Debugging) — 운영 서버에서 다른 사용자 입장으로 안전하게 디버깅하기 (0) | 2026.05.12 |
| [SAP ABAP] 프로그램 수정이 막혀 있을 때 — 수정 보조자(Modification Assistant) 해제 방법 (0) | 2026.05.08 |