ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Debugging] Debugger
    SAP/Abap 2022. 1. 22. 17:57

    [Debugging : Overview]

    디버깅이란, 프로그램 내부의 오류를 찾아 수정하는 작업을 의미하고, 이때 사용되는 소프트웨어를 디버거(Debugger)라고 한다.
    Abap debugger는 Abap workbench에 통합된 tool이다.
    Classic Debugger - Abap 프로그램과 동일 세션에서 열린다
    - Conversion exit 등 일부 Abap 프로그램에서는 디버깅이 불가능하다
    New Debugger - Abap 프로그램과 별개의 외부세션에서 열린다.
    - Abap 프로그램 종류와 관계없이 디버깅 수행이 가능하다.

    1) 디버깅 방법

    모든화면 Command창에 [/h] 입력           => 가장 많이 사용하는 방법
    모든화면 [System] -> [Utilities] -> [Debug ABAP]
    Object Navigator(SE80) [Program] -> [Test] -> [Debugging]
    Abap Editor(SE38) [Program] -> [Test] -> [Debugging]

     

    [Classic Debugger]

    1) Classic debugger 실행하기

    1. 디버깅을 원하는 프로그램 열기
    2. 명령어 창에 /h 입력
    3. New debugger 화면 생성
    4. [Go to -> Navigate to -> Switch to classic debugger] 선택
    5. Classic debugger 화면 생성

     

     

    2) Classic debugger 화면 기능

    • 디버깅 기능키
    F5 한 단계씩 이동 + Subroutine을 만나면 해당 subroutine의 FORM 구문으로 이동
    F6 한 단계씩 이동 + Subroutine을 만나면 해당 subroutine 실행 후 다음 단계로 이동
    F7 현재 실행중인 Subroutine을 실행완료한 후 다음 단계로 진행
    F8 다음 breakpoint 또는 watchpoint를 만날때 까지 프로그램을 실행

     

    • 디버킹 버튼(상단영역)
    Field - 최대 8개의 필드를 설정할 수 있다.
    - 4개의 중요한 System fields는 항상 조회된다.
         - SY-SUBRC: 코드(명령어) 성공 여부 (0:성공, 그외: 실패)
         - SY-TABIX  : 인터널테이블의 현재 line 번호
         - SY-DBCNT: SELECT구문으로 조회한 총 line수
         - SY-DYNNR: 현재 스크린번호
    Table - 인터널테이블에 포함된 테이블이 조회된다. 해당 테이블의 데이터를 조회 및 변경할 수 있다.
    Breakpoints - 30개의 breakpoint(중단점)을 설정할 수 있다.
    Watchpoints - 필드값이 변경되는 시점에서 프로그램을 정지시킬 수 있다.
    Calls - 현재 이벤트(ex. START-OF-SELECTION)의 breakpoint 순서가 조회된다.
    Overview - 프로그램의 구조를 보여준다 (ex. EVENT, SUBROUTINE, MODULE)
    Settings - 현재 디버깅모드를 세팅할 수 있다.

     

    • 디버깅 버튼(하단영역)

    Single Field 필드의 기술적 속성과 값을 조회
    Structured Field Structure 항목과 속성을 조회
    String String의 값과 길이를 조회
    Internal Table 인터널테이블의 라인, 항모그 속성 조회
    Object Abap Object의 구조 조회

     

     

    [Classic Debugger: Breakpoints]

    Breakpoints를 사용하여 프로그램 내 중단점을 선언함으로써 해당 구문이 실행될때 디버깅을 활성화 할 수 있다.

    0) Breakpoint 종류

    Static Abap코드에 직접 breakpoint를 입력하는 방식으로 모든 사용자에게 활성화된다.
    Directly set dynamic breakpoint Abap editor의 버튼을 통해 breakpoint를 지정하는 방식으로 지정한 사용자에게만 활성화된다.
    Breakpoint at statement 특정 명령어가 실핼될때 debugger가 프로그램을 정지시키는 방식
    Breakpoint at subroutine 특정 서브루틴이 호출되었을때 debugger가 프로그램을 정지시키는 방식
    Breakpoint at funciton module 특정 함수가 호출되었을때 debugger가 프로그램을 정지시키는 방식
    Breakpoint at method 특정 메서드가 호출되었을때 debugger가 프로그램을 정지시키는 방식
    Breakpoint at exeption
      and system exception
    System예외 사항이 발생하면 debugger가 프로그램을 정지시키는 방식

     

    1) Static breakpoints

    • 소스코드에 스크립트를 직접 입력하는 방식으로 자주 사용되지는 않는다.
    BREAK-POINT.                    => 모든사용자에게 적용
    BREAK-POINT 1.                 => 번호 부여
    BREAK user01.                    => 특정 사용자에게 적용 (사용자 id입력)

     

    2) Dynamic breakpoints

    • 코드 대신 버튼을 통해 중단점을 설정하는 방식
    Session breakpoint(1) 현재 로그인된 세션에서만 활성화되는 breakpoints
    External breakpoint(2) 신규 로그인된 세션에서도 활성화되는 breakpoints

     

    3) Debugger braekpoints

    • Debugger가 실행된 상태에서
      • 특정 line 더블클릭시 breakpoints가 설정된다.
      • 변수 더블클릭시 해당 변수명과 값이 조회되고 값을 조작할 수 있다.
      • 인터널테이블 더블클릭시 해당 인터널테이블 값이 조회되고 값을 조작할 수 있다.

     

    4) 구문(statements)에 breakpoints 설정

    • ex) 프로그램내 모든 SELECT구문에 breakpoints설정
      • 디버깅 화면 => [Breakpoints] -> [Breakpoint at] -> [Statement] => "SELECT" 입력

     

    5) 서브루틴 / 함수에 breakpoints 설정

    • 서브루틴: 디버깅 화면 => [Breakpoints] -> [Breakpoint at] -> [Subroutine] => 프로그램, 서브루틴 이름 입력
    • 함수:  디버깅 화면 => [Breakpoints] -> [Breakpoint at] -> [Function module] => 함수 이름 입력

     

    6) Control breakpoints

    • 디버깅모드에서 현재 프로그램 내 전체 breakpoints에 대한 정보를 조회할 수 있다.

     

     

     

    [Classic Debugger: Watchpoint]

    Watchpoint를 사용하여 프로그램 내 특정 변수값의 변경을 추적할 수 있다.
    즉, watchpoint를 설정하면 프로그램이 실행되는 중 특정 변수의 값이 특정값으로 변경되면 프로그램을 정지시킨다.

     

    ex) ZA05_35 프로그램 내 변수 gs_line-carrid의 값이 AZ로 변경되는 시점에 watchpoint 생성

     

    1. Watchpoint 생성

    2. Watchpoint 설정

    3. Watchpoint 확인

    • Watchpoint생성 후 디버깅메뉴 field파트에 해당 변수명을 입력한 후 실행하면
    • 이전에 성립한 조건에 만족할때 프로그램이 정지된다.

     

     

     

    [New Debugger]

    Classic debugger에 많은 새로운 기능이 추가된 디버거.
    Classic debugger와는 달리 프로그램 외부의 세션에서 디버거가 실행된다.

    1) Breakpoints

    Static Breakpoint Abap 소스 코드에 직접 명령어를 입력
    External Breakpoint Abap editor에서 버튼을 통해 설정
    Session Breakpoint Abap editor에서 버튼을 통해 설정, 현재 로그인된 세션단위로 중단점이 설정됨
    Dynamic Breakpoint New debugger화면에서 설정. 저장 시 session breakpoint로 변경된다

     

    2) Watchpoints

    • New debugger에서는 Free condition entry를 통해 관계연산자 뿐만 아니라 명령어를 통해 watchpoint를 설정 할 수 있다
    <Function(Variable) | Variable> Operator <Function(Variable) | Variable | Condition>
    • ex)
      • strlen(l_1) = strlen(l_2)            => l_1, l_2 두 변수의 길이가 같아질때 watchpoint 설정
      • Lines(itab) = 5                          => 인터널테이블 itab의 5번째 line이 생성될때 watchpoint 설정

    'SAP > Abap' 카테고리의 다른 글

    [ABAP Dictionary] Structure & View & Else...  (0) 2022.02.05
    [ABAP Dictionary] Overview & Table  (0) 2022.01.29
    [Internal Table] Internal table  (0) 2022.01.19
    [Internal Table] Internal table 개념  (0) 2022.01.19
    [Modularization] Function  (0) 2022.01.18
Designed by Tistory.