DBMS_DEBUG システムパッケージは主にサーバー側デバッガーを実装するために使用され、サーバー側PLプログラムをデバッグする方法を提供します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
DBMS_DEBUGシステムパッケージを使用してPLプログラムをデバッグするには、少なくとも2つのデータベースセッションが必要です。1つはターゲットプログラムを実行するTargetセッションで、もう1つはターゲットプログラムをデバッグするDebugセッションです。
Targetセッションはデバッグのための初期化セッションとして使用され、セッションにマーカーを付けることで、PLインタプリターがデバッグモードで実行され、デバッグイベントを生成します。デバッグイベントが生成されると、そのセッションから送信されます。ほとんどの場合、デバッグイベントは応答を要求します。インタプリターは一時停止し、応答を待ちます。
同時に、デバッグセッションも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
以下の識別子は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 | 現在のブレークポイントのリストを返します。 |