[SAP] 디버깅(Debugging) 및 문제 데이터 찾기

🐛 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 TraceSQL 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 로 설정할 수도 있습니다.