DBMS_DEBUGシステムパッケージは、主にサーバー側デバッガーを実装するために使用され、サーバー側PLプログラムをデバッグする方法を提供します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
DBMS_DEBUGシステムパッケージを使用してPLプログラムをデバッグするには、少なくとも2つのデータベースセッションが必要です。1つはターゲットプログラムを実行するTargetセッションであり、もう1つはターゲットプログラムをデバッグするDebugセッションです。
Targetセッションはデバッグのための初期化セッションとして使用され、セッションにマーカーを付けることで、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 | 次回のエントリポイントで戻る準備ができたときに中断します。これには、現在のエントリから呼び出されたエントリポイントも含まれます。インタプリタが Proc1 から Proc2 を呼び出している場合、break_return は Proc2 の終わりで停止します。 |
| abort_execution | DBMS_DEBUG_CONTINUE が呼び出されると、実行を停止し、イベントを強制的に「終了」させます。 |
Information Flags
以下の識別子はinfo requestedパラメータとしてSYNCHRONIZE、CONTINUE、およびGET_RUNTIME_INFOに渡すことができます。
識別子 |
説明 |
|---|---|
| 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 | 現在のブレークポイントのリストを返します。 |