내용 목차
본 장에서는 DBMS_DEBUG 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
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_ALL | STACK_DEPTH, _BREAK_POINT, LINE_INFO를 모두 가져온다. |
본 절에서는 DBMS_DEBUG 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명한다.
브레이크 포인트의 정보를 가져오기위한 타입이다.
breakpoint_info 타입의 세부 내용은 다음과 같다.
프로토타입
TYPE breakpoint_info IS RECORD ( name VARCHAR2(30), owner VARCHAR2(30), line# BINARY_INTEGER, status BINARY_INTEGER );
필드
필드 이름 | 설명 |
---|---|
name | PSM 프로그램의 이름이다. |
owner | PSM 프로그램의 owner이다. |
line# | 라인 번호이다. |
status | 브레이크 포인트의 현재 상태이다.
|
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 | 현재 버전에서는 사용되지 않는다. |
name | PSM 프로그램의 이름이다. |
owner | PSM 프로그램의 owner이다. |
line# | 라인 번호이다. |
entrypointname | 현재 버전에서는 사용되지 않는다. |
현재 수행 중인 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 | 소스코드 상 프로그램의 위치이다. |
본 절에서는 DBMS_DEBUG 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
디버그 세션에서 타겟 세션에 접속하기 위한 함수이다.
ATTACH_SESSION 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.ATTACH_SESSION ( debug_session_id IN VARCHAR2, diagnostics IN BINARY_INTEGER := 0 );
파라미터
파라미터 | 설명 |
---|---|
debug_session_id | 타겟 세션의 INITIALIZE 함수에서 반환하는 타겟 세션의 ID이다. 디버그 세션에서 특정 타겟 세션을 찾을 때 사용한다. |
diagnostics | 현재 버전에서는 사용되지 않는다. |
breakflags를 이용하여 타겟 세션의 PSM 프로그램을 진행시키거나 완료시킬 수 있는 함수이다.
프로토타입
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 프로그램의 정보를 설정한다. |
breakflags | Continue 함수의 동작을 명시하는 flag이다. 자세한 설명은 "Breakflags"를 참조한다. |
info_requested | run_info 인자에 어떤 정보를 요청하는지의 flag이다. 자세한 설명은 "Information Flags"를 참조한다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |
Target session이 디버깅을 시작하는 프러시저이다.
프로토타입
DBMS_DEBUG.DEBUG_ON ( no_client_side_plsql_engine BOOLEAN := TRUE, immediate BOOLEAN := FALSE );
파라미터
파라미터 | 설명 |
---|---|
no_client_side_plsql_engine | 현재 버전에서는 사용되지 않는다. |
immediate | 현재 버전에서는 사용되지 않는다. |
브레이크 포인트를 삭제하는 함수이다.
DELETE_BREAKPOINT 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.DELETE_BREAKPOINT ( breakpoint IN BINARY_INTEGER ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
breakpoint | 삭제할 브레이크 포인트의 번호이다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |
타겟 PSM 프로그램의 디버깅을 종료한다. 이 프러시저는 어느 시점에서든 호출될 수 있고 이 프러시저를 수행하여도 타겟 프로그램이 종료되지 않는다. 그러므로 타겟 프로그램이 수행 중일 경우 이 프러시저를 호출하면 타겟 프로그램은 hang 상태가 되므로 주의해야 한다.
DETACH_SESSION 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.DETACH_SESSION
기존의 브레이크 포인트를 삭제하지 않고 동작하지 않는 상태로 변경 할 수 있는 함수이다.
DISABLE_BREAKPOINT 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.DISABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
breakpoint | SET_BREAKPOINT 함수에서 설정된 브레이크 포인트의 번호이다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |
기존의 동작하지 않는 상태의 브레이크 포인트를 동작하는 상태로 변경 할 수 있는 함수이다.
ENABLE_BREAKPOINT 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.ENABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
breakpoint | SET_BREAKPOINT 함수에서 설정된 브레이크 포인트의 번호이다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |
현재 수행 중인 프로그램의 정보를 가져오는 함수이다. info_requested 인자의 값에 따라 가져오는 정보가 달라진다.
GET_RUNTIME_INFO 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.GET_RUNTIME_INFO ( info_requested IN BINARY_INTEGER, run_info OUT runtime_info ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
info_requested | run_info 인자에 어떤 정보를 요청하는지에 대한 flag이다. 자세한 내용은 "Information Flags"를 참조한다. |
run_info | 현재 수행 중인 PSM 프로그램의 정보를 설정한다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |
현재 수행 중인 프로그램에서 변수의 값을 가져오는 함수이다.
프로토타입
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 | 가져오려는 변수가 잘못된 경우에 반환된다. |
디버깅을 위해서 타겟 세션을 초기화하는 함수이다. 디버그 세션이 접속할 세션의 ID를 반환한다.
프로토타입
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를 반환한다. |
현재 수행 중인 프로그램의 콜스택을 반환하는 프러시저이다. 프로그램이 수행 중일 경우에만 호출 가능하다.
PRINT_BACKTRACE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.PRINT_BACKTRACE ( listing IN OUT VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
listing | VARCHAR2 타입의 버퍼에 newline이 포함된 형식으로 출력한다. |
현재 수행 중인 타겟 프로그램에 브레이크 포인트를 설정하는 함수이다. 설정된 브레이크 포인트에 도달하면 타겟 프로그램은 수행을 중단하고 대기한다.
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 | 브레이크 포인트가 설정되지 않은 경우 반환한다. |
현재 설정된 브레이크 포인트의 목록을 반환하는 프러시저이다. 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가 된다. |
타겟 프로그램의 signal을 기다리는 함수이다.
SYNCHRONIZE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_DEBUG.SYNCHRONIZE ( run_info OUT runtime_info, info_requested IN BINARY_INTEGER := NULL ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
run_info | 현재 수행 중인 PSM 프로그램의 정보를 설정한다. |
info_requested | run_info 인자에 어떤 정보를 요청하는지에 대한 flag이다. 자세한 내용은 "Information Flags"를 참조한다. |
반환값
반환값 | 설명 |
---|---|
0 | 성공 |