DBMS_DEBUGシステムパッケージは、主にサーバー側デバッガーを実装するために使用され、サーバー側PLプログラムをデバッグする方法を提供します。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供しています。
DBMS_DEBUGシステムパッケージを使用してPLプログラムをデバッグするには、少なくとも2つのデータベースセッションが必要です。1つはターゲットプログラムを実行するためのTarget Sessionであり、もう1つはターゲットプログラムをデバッグするためのDebug Sessionです。
Target Sessionはデバッグ初期化セッションとして使用され、セッションにマーカーを付けることで、PL Interpreterがデバッグモードで実行され、デバッグイベントが生成されます。デバッグイベントが生成されると、セッションから公開されます。ほとんどの場合、デバッグイベントは通知を返す必要があります。Interpreterは一時停止し、応答を待機します。
同時に、デバッグセッションはDBMS_DEBUGを使用して自己初期化を行い、監視するターゲットセッションを特定する必要があります。その後、デバッグセッションはDBMS_DEBUGのエントリポイントを呼び出して、ターゲットセッションから公開されたイベントを読み取り、ターゲットセッションと通信を行うことができます。
DBMS_DEBUGはPLコンパイラへのインターフェースを提供していませんが、コンパイラが生成したデバッグ情報に依存しています。デバッグ情報がない場合、パラメータや変数の値を確認または変更することはできません。
DBMS_DEBUGの使用方法
次のステートメントのいずれかを使用して(2番目のステートメントはパッケージまたは型本文の再コンパイル)、既存のPLコードにデバッグ情報を生成できます。
ALTER [PROCEDURE | FUNCTION | PACKAGE | TRIGGER | TYPE] <name> COMPILE DEBUG;
ALTER [PACKAGE | TYPE] <name> COMPILE DEBUG BODY;
Breakflags
以下はCONTINUEのbreakflagsパラメータ値です。これらのフラグは組み合わせて使用できます。
| 値 | 説明 |
|---|---|
| break_next_line | 次のソース行で中断します(呼び出しをスキップします)。 |
| break_any_call | 次のソース行で中断します(ステップ実行をスキップします)。 |
| break_any_return | 現在のエントリポイントから戻った後に中断します(現在のルーチンから呼び出された任意のエントリポイントをスキップします)。 |
| break_return | 次回のエントリポイントが準備されているときに中断します。これには、現在のエントリから呼び出されたエントリポイントも含まれます。インタプリタが Proc2 を呼び出す Proc1 を実行している場合、break_return は Proc2 の終了時に停止します。 |
| abort_execution | DBMS_DEBUG.CONTINUE が呼び出されたら実行を停止し、イベントを強制的に「終了」します。 |
Information Flags
以下の識別子は、SYNCHRONIZE、CONTINUE、およびGET_RUNTIME_INFOにinfo requestedパラメータとして渡すことができます。
| 識別子 | 説明 |
|---|---|
| info_getStackDepth | スタックの現在の深さを取得します。 |
| info_getBreakpoint | ブレークポイント番号を取得します。 |
| info_getLineinfo | プログラムユニット情報を取得します。 |
DBMS_DEBUGサブルーチンの概要
以下の表は、OceanBaseデータベースの現行バージョンでサポートされているDBMS_DEBUGサブルーチンとその簡潔な説明を示しています。
| サブルーチン | 説明 |
|---|---|
| ATTACH_SESSION | ターゲットのDebugIDをデバッグセッションに通知します。 |
| CONTINUE | ターゲットプログラムの実行を続けます。 |
| DEBUG_ON | デバッグモードを有効にします。 |
| DEBUG_OFF | デバッグモードを無効にします。 |
| DETACH_SESSION | ターゲットプログラムのデバッグを停止します。 |
| DELETE_BREAKPOINT | ブレークポイントを削除します。 |
| DISABLE_BREAKPOINT | ブレークポイントを無効にします。 |
| ENABLE_BREAKPOINT | 既存のブレークポイントを有効にします。 |
| GET_VALUE | 現在実行中のプログラムから値を取得します。 |
| GET_VALUES | 現在のスタックフレームのすべての変数情報を返します。 |
| GET_RUNTIME_INFO | 現在のプログラムに関する情報を返します。 |
| GET_TIMEOUT_BEHAVIOUR | 現在のタイムアウト動作を返します。 |
| INITIALIZE | ターゲットセッションでDebugIDを設定します。 |
| PROBE_VERSION | サーバー上のDBMS_DEBUGのバージョン番号を返します。 |
| PRINT_BACKTRACE | スタックトレースを出力します。 |
| SET_TIMEOUT | タイムアウト値を設定します。 |
| SET_TIMEOUT_BEHAVIOUR | 監視スレッドがタイムアウトした場合のターゲットセッションの処理方法を指示します。 |
| SET_BREAKPOINT | プログラムユニットにブレークポイントを設定します。 |
| SHOW_BREAKPOINTS | 現在のブレークポイントのリストを返します。 |