제5장 DBMS_DEBUG

내용 목차

5.1. 개요
5.2. 타입
5.2.1. breakpoint_info
5.2.2. program_info
5.2.3. runtime_info
5.3. 프러시저와 함수
5.3.1. ATTACH_SESSION
5.3.2. CONTINUE
5.3.3. DEBUG_OFF
5.3.4. DEBUG_ON
5.3.5. DELETE_BREAKPOINT
5.3.6. DETACH_SESSION
5.3.7. DISABLE_BREAKPOINT
5.3.8. ENABLE_BREAKPOINT
5.3.9. GET_RUNTIME_INFO
5.3.10. GET_VALUE
5.3.11. INITIALIZE
5.3.12. PRINT_BACKTRACE
5.3.13. SET_BREAKPOINT
5.3.14. SHOW_BREAKPOINTS
5.3.15. SYNCHRONIZE

본 장에서는 DBMS_DEBUG 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

5.1. 개요

DBMS_DEBUG 패키지는 두 개의 세션을 이용하여 PSM 프로그램의 디버깅을 할 수 있는 패키지이다.

PSM 프로그램을 수행하는 세션을 타겟 세션(Target session), 디버깅 정보를 타겟 세션에서 받는 세션을 디버그 세션(Debug session)이라고 한다.

다음은 DBMS_DEBUG 패키지 내에 정의된 상수이다.

SUCCESS                     CONSTANT BINARY_INTEGER := 0;
ERROR_BOGUS_FRAME           CONSTANT BINARY_INTEGER := 1;
ERROR_NO_DEBUG_INFO         CONSTANT BINARY_INTEGER := 2;
ERROR_NO_SUCH_OBJECT        CONSTANT BINARY_INTEGER := 3;
ERROR_UNKNOWN_TYPE          CONSTANT BINARY_INTEGER := 4;
ERROR_INDEXED_TABLE         CONSTANT BINARY_INTEGER := 5;
ERROR_ILLEGAL_INDEX         CONSTANT BINARY_INTEGER := 6;
ERROR_NULLCOLLECTION        CONSTANT BINARY_INTEGER := 7;
ERROR_NULLVALUE             CONSTANT BINARY_INTEGER := 8;
ERROR_ILLEGAL_VALUE         CONSTANT BINARY_INTEGER := 9;
ERROR_ILLEGAL_NULL          CONSTANT BINARY_INTEGER := 10;
ERROR_VALUE_MALFORMED       CONSTANT BINARY_INTEGER := 11;
ERROR_OTHER                 CONSTANT BINARY_INTEGER := 12;
ERROR_NAME_INCOMPLETE       CONSTANT BINARY_INTEGER := 13;
ERROR_NO_SUCH_BREAKPT       CONSTANT BINARY_INTEGER := 14;
ERROR_IDLE_BREAKPT          CONSTANT BINARY_INTEGER := 15;
ERROR_BAD_HANDLE            CONSTANT BINARY_INTEGER := 16;
ERROR_UNIMPLEMENTED         CONSTANT BINARY_INTEGER := 17;
ERROR_DEFERRED              CONSTANT BINARY_INTEGER := 18;
ERROR_EXCEPTION             CONSTANT BINARY_INTEGER := 19;
ERROR_COMMUNICATION         CONSTANT BINARY_INTEGER := 20;
ERROR_TIMEOUT               CONSTANT BINARY_INTEGER := 21;
ILLEGAL_INIT                CONSTANT BINARY_INTEGER := 22;
PIPE_CREATION_FAILURE       CONSTANT BINARY_INTEGER := 23;
PIPE_SEND_FAILURE           CONSTANT BINARY_INTEGER := 24;
PIPE_RECEIVE_FAILURE        CONSTANT BINARY_INTEGER := 25;
PIPE_DATATYPE_MISMATCH      CONSTANT BINARY_INTEGER := 26;
PIPE_DATA_ERROR             CONSTANT BINARY_INTEGER := 27;
  • Breakflags

    • 프로토타입

      BREAK_DEFAULT               CONSTANT BINARY_INTEGER := 0;
      BREAK_NEXT_LINE             CONSTANT BINARY_INTEGER := 1;
      BREAK_ANY_CALL              CONSTANT BINARY_INTEGER := 2;
      BREAK_ANY_RETURN            CONSTANT BINARY_INTEGER := 3;
      BREAK_RETURN                CONSTANT BINARY_INTEGER := 4;
      BREAK_EXCEPTION             CONSTANT BINARY_INTEGER := 5;
      BREAK_HANDLER               CONSTANT BINARY_INTEGER := 6;
      ABORT_EXECUTION             CONSTANT BINARY_INTEGER := 7;
    • 인자

      DBMS_DEBUG.CONTINUE 함수의 인자로 사용하는 breakflags에 대한 설명이다.

      인자설명
      BREAK_DEFAULT설정된 다음 브레이크 포인트로 진행한다.
      BREAK_NEXT_LINE다음 라인으로 진행한다(step over).
      BREAK_ANY_CALL다음 라인으로 진행한다(step into).
      BREAK_ANY_RETURN현재 entrypoint를 완료하는 시점까지 진행한다(step out).
      BREAK_RETURN현재 버전에서는 사용되지 않는다.
      BREAK_EXCEPTION현재 버전에서는 사용되지 않는다.
      BREAK_HANDLER현재 버전에서는 사용되지 않는다.
      ABORT_EXECUTION프로그램을 즉시 종료한다.

  • Information Flags

    • 프로토타입

      INFO_GET_STACK_DEPTH        CONSTANT BINARY_INTEGER := 0;
      INFO_GET_BREAK_POINT        CONSTANT BINARY_INTEGER := 1;
      INFO_GET_LINE_INFO          CONSTANT BINARY_INTEGER := 2;
      INFO_GET_ALL                CONSTANT BINARY_INTEGER := 3;

    • 인자

      rumtime information을 가져올 때, 어느 필드를 가져올지에 대한 flag이다.

      인자설명
      INFO_GET_STACK_DEPTH현재 스택의 depth를 가져온다.
      INFO_GET_BREAK_POINT지금 타겟 프로그램이 멈춰있는 브레이크 포인트의 ID를 가져온다.
      INFO_GET_LINE_INFO현재 수행 중인 라인 정보를 가져온다.
      INFO_GET_ALLSTACK_DEPTH, _BREAK_POINT, LINE_INFO를 모두 가져온다.

5.2. 타입

본 절에서는 DBMS_DEBUG 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명한다.

5.2.1. breakpoint_info

브레이크 포인트의 정보를 가져오기위한 타입이다.

breakpoint_info 타입의 세부 내용은 다음과 같다.

  • 프로토타입

    TYPE breakpoint_info IS RECORD
    (
            name        VARCHAR2(30),
            owner       VARCHAR2(30),
            line#       BINARY_INTEGER,
            status      BINARY_INTEGER
    );
  • 필드

    필드 이름설명
    namePSM 프로그램의 이름이다.
    ownerPSM 프로그램의 owner이다.
    line#라인 번호이다.
    status

    브레이크 포인트의 현재 상태이다.

    • breakpoint_status_active

    • breakpoint_status_disabled

5.2.2. program_info

PSM 프로그램의 위치를 나타내기 위한 타입이다. 프로그램의 특정 라인을 가리켜서 스택 backtrace, break point 설정 등에 사용한다.

program_info 타입의 세부 내용은 다음과 같다.

  • 프로토타입

    TYPE program_info IS RECORD
    (
            namespace   BINARY_INTEGER,
            name        VARCHAR2(30),
            owner       VARCHAR2(30),
            line#       BINARY_INTEGER,
            entrypointname   VARCHAR2(30)
    );
  • 필드

    필드 이름설명
    namespace현재 버전에서는 사용되지 않는다.
    namePSM 프로그램의 이름이다.
    ownerPSM 프로그램의 owner이다.
    line#라인 번호이다.
    entrypointname현재 버전에서는 사용되지 않는다.

5.2.3. runtime_info

현재 수행 중인 PSM 프로그램의 정보를 나타내는 타입이다.

runtime_info 타입의 세부 내용은 다음과 같다.

  • 프로토타입

    TYPE runtime_info IS RECORD
    (
            line#            BINARY_INTEGER,
            terminated       BINARY_INTEGER,
            breakpoint       BINARY_INTEGER,
            stackdepth       BINARY_INTEGER,
            program          program_info
    );
  • 필드

    필드 이름설명
    line#라인 번호이다.
    terminated해당 프로그램이 종료되었는지의 여부이다.
    breakpoint브레이크 포인트의 유일한 ID이다.
    stackdepth현재 수행 중인 프로그램의 스택 depth이다.
    program소스코드 상 프로그램의 위치이다.

5.3. 프러시저와 함수

본 절에서는 DBMS_DEBUG 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.

5.3.1. ATTACH_SESSION

디버그 세션에서 타겟 세션에 접속하기 위한 함수이다.

ATTACH_SESSION 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.ATTACH_SESSION
    (
        debug_session_id  IN VARCHAR2,
        diagnostics       IN BINARY_INTEGER := 0
    );
  • 파라미터

    파라미터설명
    debug_session_id

    타겟 세션의 INITIALIZE 함수에서 반환하는 타겟 세션 ID이다.

    디버그 세션에서 특정 타겟 세션을 찾을 때 사용한다.

    diagnostics현재 버전에서는 사용되지 않는다.

5.3.2. CONTINUE

breakflags를 이용하여 타겟 세션의 PSM 프로그램을 진행시키거나 완료시킬 수 있는 함수이다.

CONTINUE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.CONTINUE
    (
        run_info         IN OUT  runtime_info,
        breakflags       IN      BINARY_INTEGER,
        info_requested   IN      BINARY_INTEGER := NULL
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    run_info현재 수행 중인 PSM 프로그램의 정보를 설정한다.
    breakflagsContinue 함수의 동작을 명시하는 flag이다. 자세한 설명은 "Breakflags"를 참조한다.
    info_requestedrun_info 인자에 어떤 정보를 요청하는지의 flag이다. 자세한 설명은 "Information Flags"를 참조한다.
  • 반환값

    반환값설명
    0성공

5.3.3. DEBUG_OFF

타겟 세션이 debugging을 종료하는 프러시저이다.

DEBUG_OFF 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.DEBUG_OFF

5.3.4. DEBUG_ON

타겟 세션이 debugging을 시작하는 프러시저이다.

DEBUG_ON 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.DEBUG_ON
    (
        no_client_side_plsql_engine     BOOLEAN := TRUE,
        immediate                       BOOLEAN := FALSE
    );
  • 파라미터

    파라미터설명
    no_client_side_plsql_engine현재 버전에서는 사용되지 않는다.
    immediate현재 버전에서는 사용되지 않는다.

5.3.5. DELETE_BREAKPOINT

브레이크 포인트를 삭제하는 함수이다.

DELETE_BREAKPOINT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.DELETE_BREAKPOINT
    (
        breakpoint      IN      BINARY_INTEGER
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    breakpoint삭제할 브레이크 포인트의 번호이다.
  • 반환값

    반환값설명
    0성공

5.3.6. DETACH_SESSION

타겟 PSM 프로그램의 디버깅을 종료한다. 이 프러시저는 어느 시점에서든 호출될 수 있고 이 프러시저를 수행하여도 타겟 프로그램이 종료되지 않는다. 그러므로 타겟 프로그램이 수행 중일 경우 이 프러시저를 호출하면 타겟 프로그램은 hang 상태가 되므로 주의해야 한다.

DETACH_SESSION 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.DETACH_SESSION

5.3.7. DISABLE_BREAKPOINT

기존의 브레이크 포인트를 삭제하지 않고 동작하지 않는 상태로 변경 할 수 있는 함수이다.

DISABLE_BREAKPOINT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.DISABLE_BREAKPOINT
    (
        breakpoint     IN      BINARY_INTEGER
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    breakpointSET_BREAKPOINT 함수에서 설정된 브레이크 포인트의 번호이다.
  • 반환값

    반환값설명
    0성공

5.3.8. ENABLE_BREAKPOINT

기존의 동작하지 않는 상태의 브레이크 포인트를 동작하는 상태로 변경할 수 있는 함수이다.

ENABLE_BREAKPOINT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.ENABLE_BREAKPOINT
    (
        breakpoint     IN      BINARY_INTEGER
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    breakpointSET_BREAKPOINT 함수에서 설정된 브레이크 포인트 번호이다.
  • 반환값

    반환값설명
    0성공

5.3.9. GET_RUNTIME_INFO

현재 수행 중인 프로그램의 정보를 가져오는 함수이다. info_requested 인자의 값에 따라 가져오는 정보가 달라진다.

GET_RUNTIME_INFO 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.GET_RUNTIME_INFO
    (
        info_requested  IN  BINARY_INTEGER,
        run_info        OUT runtime_info
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    info_requestedrun_info 인자에 어떤 정보를 요청하는지에 대한 flag이다. 자세한 내용은 "Information Flags"를 참조한다.
    run_info현재 수행 중인 PSM 프로그램의 정보를 설정한다.
  • 반환값

    반환값설명
    0성공

5.3.10. GET_VALUE

현재 수행 중인 프로그램에서 변수의 값을 가져오는 함수이다.

GET_VALUE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.GET_VALUE
    (
        variable_name  IN  VARCHAR2,
        frame#         IN  BINARY_INTEGER,
        scalar_value   OUT VARCHAR2,
        format         IN  VARCHAR2 := NULL
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    variable_name변수의 이름이다.
    frame#현재 버전에서는 사용되지 않는다.
    scalar_value현재 버전에서는 사용되지 않는다.
    format현재 버전에서는 사용되지 않는다.
  • 반환값

    반환값설명
    0성공
    ERROR_ILLEGAL_VALUE가져오려는 변수가 잘못된 경우에 반환된다.

5.3.11. INITIALIZE

디버깅을 위해서 타겟 세션을 초기화하는 함수이다. 디버그 세션과 연결할 디버그 세션 ID를 반환한다.

INITIALIZE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.INITIALIZE
    (
        debug_session_id  IN VARCHAR2,
        diagnostics       IN BINARY_INTEGER := 0
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    debug_session_id

    디버그 세션이 접속할 세션 ID이다.

    NULL인 경우 유일한 ID가 생성된다.

    diagnostics현재 버전에서는 사용되지 않는다.
  • 반환값

    반환값설명
    새롭게 등록된 debug session ID디버그 세션에서 접속할 세션의 ID를 반환한다.

5.3.12. PRINT_BACKTRACE

현재 수행 중인 프로그램의 콜 스택을 반환하는 프러시저이다. 프로그램이 수행 중일 경우에만 호출 가능하다.

PRINT_BACKTRACE 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.PRINT_BACKTRACE
    (
        listing IN OUT VARCHAR2
    ); 
  • 파라미터

    파라미터설명
    listingVARCHAR2 타입의 버퍼에 newline이 포함된 형식으로 출력한다.

5.3.13. SET_BREAKPOINT

현재 수행 중인 타겟 프로그램에 브레이크 포인트를 설정하는 함수이다. 설정된 브레이크 포인트에 도달하면 타겟 프로그램은 수행을 중단하고 대기한다.

SET_BREAKPOINT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.SET_BREAKPOINT
    (
        program           IN  program_info,
        line#             IN  BINARY_INTEGER,
        breakpoint#       OUT BINARY_INTEGER,
        fuzzy             IN  BINARY_INTEGER := 0,
        iterations        IN  BINARY_INTEGER := 0
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    program브레이크 포인트가 설정될 PSM 프로그램의 정보를 설정한다.
    line#브레이크 포인트가 설정될 라인 번호이다.
    breakpoint#설정된 브레이크 포인트의 유일한 ID이다.
    fuzzy현재 버전에서는 사용되지 않는다.
    iterations현재 버전에서는 사용되지 않는다.
  • 반환값

    반환값설명
    0성공
    ERROR_IDLE_BREAKPT브레이크 포인트가 설정되지 않은 경우 반환한다.

5.3.14. SHOW_BREAKPOINTS

현재 설정된 브레이크 포인트의 목록을 반환하는 프러시저이다. 2개의 오버로드된 프러시저가 존재한다.

SHOW_BREAKPOINTS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.SHOW_BREAKPOINTS
    (
        listing IN OUT VARCHAR2
    );
    DBMS_DEBUG.SHOW_BREAKPOINTS
    (
        listing    OUT breakpoint_table
    ); 
  • 파라미터

    파라미터설명
    listing

    VARCHAR2 타입의 버퍼에 newline이 포함된 형식으로 출력한다.

    브레이크 포인트 entry의 indexed-table 형식으로 출력한다.

    브레이크 포인트의 유일한 ID가 index가 된다.

5.3.15. SYNCHRONIZE

타겟 프로그램의 signal을 기다리는 함수이다.

SYNCHRONIZE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_DEBUG.SYNCHRONIZE
    (
        run_info         OUT     runtime_info,
        info_requested   IN      BINARY_INTEGER := NULL
    )
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    run_info현재 수행 중인 PSM 프로그램의 정보를 설정한다.
    info_requestedrun_info 인자에 어떤 정보를 요청하는지에 대한 flag이다. 자세한 내용은 "Information Flags"를 참조한다.
  • 반환값

    반환값설명
    0성공