DBMS_DEBUG
DBMS_DEBUG 패키지의 기본 개념과 패키지 내의 프로시저와 함수를 사용하는 방법을 설명합니다.
개요
DBMS_DEBUG 패키지는 두 개의 세션을 이용하여 PSM 프로그램의 디버깅을 할 수 있는 패키지입니다.
디버깅을 하기 위해서는 디버깅을 할 PSM 코드를 먼저 PSM_DEBUG 파라미터를 켜서,디버그 정보를 포함한 상태로 컴파일해야 합니다.
타겟 세션에서 PSM_DEBUG= true로 설정하고 dbms_debug.debug_on으로 디버그 모드를 킨 상태에서는, 익명 블록(Anonymous Block) 또한 디버그모드로 컴파일되고, 수행할 때 break 상태에 빠져 hang에 걸리게 됩니다. 이 상태에서는 디버그세션에서 dbms_debug.continue를 다시 수행하여 hang 상태에서 탈출할 수 있습니다. 의도치 않은 hang을 피하려면 디버깅하려는 PSM 컴파일을 완료했다면 PSM_DEBUG를 다시 false로 바꿔주는 것이 좋습니다.
PSM 프로그램을 수행하는 세션을 타겟 세션(Target session), 디버깅 정보를 타겟 세션에서 받는 세션을 디버그 세션(Debug session)이라고 합니다.
타겟 세션에서 DBMS_DEBUG.DEBUG_ON 프로시저를 수행한 후, DBMS_DEBUG.INITIALIZE 함수를 통해 디버그 세션이 DBMS_DEBUG.ATTACH 프로시저를 통해 접속할 수 있는 세션 ID를 얻을 수 있습니다. 이후 타겟 세션에서 디버깅할 PSM 코드를 수행하면, 타겟 세션은 break 상태에서 디버깅 세션으로부터 명령을 기다리는 상태가 됩니다.
타입
본 절에서는 DBMS_DEBUG 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명합니다.
breakpoint_info
브레이크 포인트의 정보를 가져오기 위한 타입입니다.
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
브레이크 포인트의 현재 상태
breakpoint_status_active
breakpoint_status_disabled
program_info
PSM 프로그램의 위치를 나타내기 위한 타입입니다. 프로그램의 특정 라인을 가리켜서 스택 backtrace, break point 설정 등에 사용합니다.
program_info 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
namespace
PSM 프로그램의 종류를 구분하는 코드 값
name
PSM 프로그램의 이름
owner
PSM 프로그램의 owner
line#
라인 번호
entrypointname
현재 버전에서는 사용되지 않음
runtime_info
현재 수행 중인 PSM 프로그램 정보를 나타내는 타입입니다.
runtime_info 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
terminated
해당 프로그램이 종료되었는지의 여부
breakpoint
브레이크 포인트의 유일한 ID
stackdepth
현재 수행 중인 프로그램의 스택 depth
program
소스코드 상 프로그램의 위치
프로시저와 함수
본 절에서는 DBMS_DEBUG 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.
ATTACH_SESSION
디버그 세션에서 타겟 세션에 접속하기 위한 함수입니다.
ATTACH_SESSION 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
debug_session_id
타겟 세션의 INITIALIZE 함수에서 반환하는 타겟 세션의 ID
디버그 세션에서 특정 타겟 세션을 찾을 때 사용
diagnostics
현재 버전에서는 사용되지 않음
디버그 세션은 attach 이후 hang 상태가 됩니다. 타겟 세션에서 디버깅할 PSM을 수행하면 hang 상태에서 탈출합니다.
CONTINUE
breakflags를 이용하여 타겟 세션의 PSM 프로그램을 진행시키거나 완료시킬 수 있는 함수입니다.
CONTINUE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
run_info
현재 수행 중인 PSM 프로그램의 정보를 설정
breakflags
Continue 함수의 동작을 명시하는 flag
자세한 설명은 "Breakflags"를 참조
info_requested
run_info 인자에 어떤 정보를 요청하는지의 flag
자세한 설명은 "Informa tion Flags"를 참조
반환값
0
성공
DEBUG_OFF
Target session이 디버깅을 종료하는 프로시저입니다.
DEBUG_OFF 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
DEBUG_ON
Target session이 디버깅을 시작하는 프로시저입니다.
DEBUG_ON 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
no_client_side_plsql_engine
현재 버전에서는 사용되지 않음
immediate
현재 버전에서는 사용되지 않음
DELETE_BREAKPOINT
브레이크 포인트를 삭제하는 함수입니다.
DELETE_BREAKPOINT 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
breakpoint
삭제할 브레이크 포인트의 번호
반환값
0
성공
DETACH_SESSION
타겟 PSM 프로그램의 디버깅을 종료합니다. 이 프로시저는 어느 시점에서든 호출될 수 있고 이 프로시저를 수행하여도 타겟 프로그램이 종료되지 않습니다. 그러므로 타겟 프로그램이 수행 중일 경우 이 프로시저를 호출하면 타겟 프로그램은 hang 상태가 되므로 주의해야 합니다.
DETACH_SESSION 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
DISABLE_BREAKPOINT
기존의 브레이크 포인트를 삭제하지 않고 동작하지 않는 상태로 변경할 수 있는 함수입니다.
DISABLE_BREAKPOINT 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
breakpoint
SET_BREAKPOINT 함수에서 설정된 브레이크 포인트의 번호
반환값
0
성공
ENABLE_BREAKPOINT
기존의 동작하지 않는 상태의 브레이크 포인트를 동작하는 상태로 변경할 수 있는 함수입니다.
ENABLE_BREAKPOINT 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
breakpoint
SET_BREAKPOINT 함수에서 설정된 브레이크 포인트의 번호
반환값
0
성공
GET_RUNTIME_INFO
현재 수행 중인 프로그램의 정보를 가져오는 함수입니다. info_requested 인자의 값에 따라 가져오는 정보가 달라집니다.
GET_RUNTIME_INFO 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
info_requested
run_info 인자에 어떤 정보를 요청하는지에 대한 flag
자세한 내용은"Information Flags"를 참조
run_info
현재 수행 중인 PSM 프로그램의 정보를 설정
반환값
0
성공
GET_VALUE
현재 수행 중인 프로그램에서 변수의 값을 가져오는 함수입니다.
GET_VALUE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
variable_name
변수의 이름
frame#
스택 프레임값 (단, Tibero는 현재 스택 레벨의 변수에만 접근 가능하여 BINARY_INTEGER 범위 내 어떠한 값을 넣어도 0과 동일하게 동작)
scalar_value
반환되는 값
format
현재 버전에서는 사용되지 않음
반환값
0
성공
ERROR_ILLEGAL_VALUE
가져오려는 변수가 잘못된 경우에 반환
INITIALIZE
디버깅을 위해서 타겟 세션을 초기화하는 함수입니다. 디버그 세션이 접속할 세션의 ID를 반환합니다. INITIALIZE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
debug_session_id
디버그 세션이 접속할 세션의 ID
NULL인 경우 유일한 ID가 생성
diagnostics
현재 버전에서는 사용되지 않음
반환값
새롭게 등록된 Debugsession ID
디버그 세션에서 접속할 세션의 ID를 반환
PRINT_BACKTRACE
현재 수행 중인 프로그램의 콜스택을 반환하는 프로시저입니다. 프로그램이 수행 중일 경우에만 호출 가능 합니다.
PRINT_BACKTRACE 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
listing
VARCHAR2 타입의 버퍼에 newline이 포함된 형식으로 출력
SET_BREAKPOINT
현재 수행 중인 타겟 프로그램에 브레이크 포인트를 설정하는 함수입니다. 설정된 브레이크 포인트에 도달 하면 타겟 프로그램은 수행을 중단하고 대기합니다.
SET_BREAKPOINT 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
program
브레이크 포인트가 설정될 PSM 프로그램의 정보를 설정
line#
브레이크 포인트가 설정될 라인 번호
breakpoint#
설정된 브레이크 포인트의 유일한 ID
fuzzy
현재 버전에서는 사용되지 않음
iterations
현재 버전에서는 사용되지 않음
반환값
0
성공
ERROR_IDLE_BREAKPT
브레이크 포인트가 설정되지 않은 경우 반환
SHOW_BREAKPOINTS
현재 설정된 브레이크 포인트의 목록을 반환하는 프로시저입니다. 2개의 오버로드된 프로시저가 존재합니다.
SHOW_BREAKPOINTS 프로시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
listing
VARCHAR2 타입의 버퍼에 newline이 포함된 형식으로 출력
브레이크 포인트 entry의 indexed-table의 형식으로 출력
브레이크 포인트의 유일한ID가 index가 됨
SYNCHRONIZE
타겟 프로그램의 signal을 기다리는 함수입니다.
SYNCHRONIZE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
run_info
현재 수행 중인 PSM 프로그램의 정보를 설정
info_requested
run_info 인자에 어떤 정보를 요청하는지에 대한 flag
자세한 내용은 "Information Flags"를 참조
반환값
0
성공
Appendix
다음은 DBMS_DEBUG 패키지 내에 정의된 상수입니다.
Breakflags
– 프로토타입
– 인자
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
– 프로토타입
– 인자
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를 모두 가져옴
Last updated

