🐛 SAP 기능적 디버깅(Debugging) 및 문제 데이터 찾기
SAP 오류가 발생했을 때, 가장 찾기 쉬운 방법은 디버깅을 걸어서 로직을 추적해보는 것입니다.
이러한 디버깅을 위한 기본적인 방법들을 정리해봅니다.
표준 디버깅(/h 또는 SE38 등으로 프로그램 조회 후 BreakPoint 설정) 또는 /h 를 못할 때 TXT파일을 만들어서 팝업 등에서 디버깅 과 디버깅 시 흐름 및 문제 추적 방법 등을 나열합니다.
1️⃣ 디버깅 진입 및 기본 사용법
A. 표준 디버깅 시작 방법
| 방법 | 설명 | 사용 T-Code/Action |
| /h 명령어 | T-Code 입력창에 /h를 입력하고 엔터를 치면, 다음 액션 시 New Debugger가 자동으로 실행됩니다. | T-Code: /h 입력 후 엔터 |
| 외부 Breakpoint | 특정 ABAP 코드 라인에 직접 외부 Breakpoint를 설정합니다. 외부 환경(Web Dynpro, RFC, Gateway 등)에서 호출될 때 유용합니다. |
SE38/SE80에서 코드 라인 옆에 설정 (집 모양 아이콘) |
| 시스템 메시지 발생 시 | 오류 메시지 팝업창에서 /h를 입력하거나, /A 명령어를 입력하면 Classic Debugger가 실행되기도 합니다. | T-Code: /A (Classic Debugger) |
🚫 /h로 디버깅이 안 될 때 대체 방법 (팝업 등으로 명령어 필드에서 /h 입력을 못하는 Case)
아래 내용을 TXT 파일로 만든 다음, SAP GUI로 TXT파일을 넣어서 걸 수 있습니다.
[FUNCTION]
Command=/H
Title=Debugger
Type=SystemCommand
B. 핵심 단축키 (F Key)
| 단축키 | 기능 | 설명 |
| F5 | Step-by-step | 한 줄씩 실행. Perform (Subroutine) 안으로 진입. |
| F6 | Execute | 한 줄 실행. Perform (Subroutine) 안으로 진입하지 않고 다음 라인으로 건너뜁니다. |
| F7 | Return | 현재 서브루틴, 함수 모듈, 또는 메서드 실행을 완료하고 호출 지점으로 돌아갑니다. |
| F8 | Continue | 다음 Breakpoint까지 또는 프로그램 끝까지 실행을 계속합니다. |
2️⃣ 문제 데이터 및 로직 흐름 추적
A. 변수 및 내부 테이블 확인
- Variables 탭: 디버거의 Variables 탭에서 로컬 변수, 글로벌 변수, 내부 테이블 등을 확인합니다.
- Watchpoint 설정: 특정 변수나 내부 테이블의 값이 변경될 때 자동으로 디버거를 멈추게 하려면 Watchpoint를 설정합니다. (예: L_MENGE > 100일 때 멈춤)
- 필드 심볼/데이터 참조: <FS>나 LR_DATA 형태의 변수를 더블 클릭하거나 Watchpoint에 추가하여 실제 가리키는 데이터를 확인합니다.
B. 데이터 검색: ST12 / SQL Trace 활용
디버거에서 데이터를 확인하는 것도 중요하지만, 프로그램이 어떤 데이터를 조회하는지 아는 것이 더 중요합니다.
- ST12 (Single Transaction Analysis):
- 용도: 특정 트랜잭션 실행 중 발생하는 ABAP Trace와 SQL Trace를 동시에 분석하여 성능 문제나 데이터 조회 로직을 파악할 때 최적입니다.
- 꿀팁: 트랜잭션 실행 전에 ST12에서 설정하고 실행하면, 프로그램이 어떤 DB 테이블을 어떤 키 값으로 조회(SELECT) 했는지 정확히 알 수 있어, 문제 데이터를 DB에서 바로 찾을 수 있습니다.
- SQL Trace (T-Code: ST05):
- 용도: 프로그램이 DB에서 데이터를 조회, 수정, 삽입, 삭제하는 모든 SQL 문을 추적합니다.
- 꿀팁: 추적 결과를 통해 문제 데이터가 어떤 테이블에 잘못 저장되었는지, 또는 필요한 데이터가 누락되었는지 확인하는 데 가장 빠르고 확실한 방법입니다.
C. Call Stack을 이용한 로직 역추적
- Call Stack (호출 스택) 탭: 현재 실행 중인 코드 라인이 어떤 서브루틴, 함수 모듈, 메서드를 거쳐서 호출되었는지 순서대로 보여줍니다.
- 활용: 오류가 발생한 지점(DUMP 또는 메시지)에서 Call Stack을 역순으로 클릭하며 올라가면, "어디서부터" 잘못된 로직이나 데이터가 시작되었는지 파악할 수 있습니다. 특히 표준 프로그램에서 커스터마이징(Exit, BAdI)이 실행된 위치를 찾을 때 매우 유용합니다.
D. 메시지 발생 지점 찾기
- 메시지 ID/번호 확인: 오류 메시지(예: ME 123)가 나타나면, 해당 메시지 클래스(ME)와 메시지 번호(123)를 확인합니다.
- SE91/SE93 검색:
- SE91 (메시지 유지보수)에서 해당 메시지 클래스 및 번호를 조회하여 메시지 텍스트를 확인합니다.
- SE93 (트랜잭션 코드 유지보수)에서 트랜잭션을 찾습니다.
- Where-Used List (사용처 목록): SE91에서 메시지를 선택한 후 "사용처 목록(Where-Used List)" 기능을 사용하여, 해당 메시지가 어떤 ABAP 프로그램에서 호출되는지 찾아 Breakpoint를 설정합니다. 이렇게 하면 오류 발생 직전에 디버거가 멈춥니다.
- Watchpoint 를 SY-MSGID와 SY-MSGNO 로 설정할 수도 있습니다.
'ERP(SAP)' 카테고리의 다른 글
| [MM] MIRO 분할 송장 처리 방법 (여러 코스트센터) (0) | 2025.12.29 |
|---|---|
| [SAP] MM - S/4HANA MATDOC이란? 무엇인가 (0) | 2025.12.03 |
| [SAP]💡 MM(Materials Management) 운영 전문가 가이드 (0) | 2025.12.01 |
| [SAP] Clean Core (클린 코어) 🧹전략 및 학습 과정 (0) | 2025.11.28 |
| [SAP] 📝 MM 3-Way 매칭 (PO, GR, IV) (1) | 2025.11.27 |
