日本語PDF

221 DEBUG_EXTPROC

DEBUG_EXTPROCパッケージによって、セッション内のextprocエージェントを起動できます。このユーティリティ・パッケージは、外部プロシージャをデバッグするのに役立ちます。

この章のトピックは、次のとおりです:

221.1 DEBUG_EXTPROCのセキュリティ・モデル

Oracleアカウントに、パッケージに対するEXECUTE権限と、CREATE LIBRARY権限が必要です。

221.2 DEBUG_EXTPROCの操作上のノート

DEBUG_EXTPROCには、次の操作上のノートが適用されます。

パッケージをインストールするには、スクリプトDBGEXTP.SQLを実行します。

  • 'extproc'プロセスをデバッグするOracle USERに、このパッケージをインストールまたはロードします。

  • DEBUG_EXTPROCパッケージに対するEXECUTE権限があることを確認します。

    SELECT SUBSTR(OBJECT_NAME, 1, 20) 
    FROM USER_OBJECTS 
    WHERE OBJECT_NAME = 'DEBUG_EXTPROC';
  • パッケージに対してEXECUTE権限がある場合は、他のユーザーとしてこのパッケージをインストールできます。

    ノート:

    これらのノートは、デバッグ処理を支援するために、デバッグ記号が付いた共有ライブラリを作成しておくことを前提としています。Cコンパイラのマニュアルをチェックして、適切なCコンパイラ・スイッチで、デバッグ記号が付いた共有ライブラリを作成してください。

パッケージをインストール後、次の操作を行います。

  • ORACLEに接続して、SQL*PlusまたはOCIプログラムから新規のOracleセッションを起動します。

  • プロシージャDEBUG_EXTPROC.STARTUP_EXTPROC_AGENTを実行して、このセッションでextprocエージェントを起動します。たとえば、DEBUG_EXTPROC.STARTUP_EXTPROC_AGENTを実行します。extprocエージェントが終了してしまうので、このセッションは終了しないでください。

  • このセッションで起動したextprocエージェントのPIDを判別します。

  • デバッガ(たとえば、gdb、dbxまたはシステム固有なデバッガ)を使用して、extproc実行ファイルをロードし、実行プロセスに連結します。

  • ファンクション'pextproc'にブレーク・ポイントを設定し、デバッガが実行を継続できるようにします。

  • 最初にDEBUG_EXTPROC.STARTUP_EXTPROC_AGENTを実行した同じセッションで、外部プロシージャを実行します。

  • デバッガがファンクション'pextproc'でブレークします。この時点で、PL/SQL外部ファンクションで参照する共有ライブラリがロードされ、ファンクションが解決されます。Cファンクションにブレーク・ポイントを設定し、デバッガが実行を継続できるようにします。

PL/SQLは、実行時に共有ライブラリをロードするため、使用するデバッガは、共有ライブラリから新規の記号を自動的に追跡管理できる場合とできない場合があります。デバッガ・コマンドをいくつか発行して、記号をロードできます(たとえば、gdb内の'share')。

  • デバッガは、Cファンクションでブレークします。デバッグ記号が付いた共有ライブラリを作成しておくことが前提です。

  • デバッグを続行します。

221.3 ルールおよび制限

DEBUG_EXTPROCは、実行中のプロセスにアタッチできるデバッガ付きのプラットフォームでのみ動作します。

221.4 DEBUG_EXTPROCサブプログラムの要約

STARTUP_EXTPROC_AGENTプロシージャは、唯一のDEBUG_EXTPROCサブプログラムです。

表221-1 DEBUG_EXTPROCパッケージのサブプログラム

サブプログラム 説明

STARTUP_EXTPROC_AGENTプロシージャ

セッション内でextprocエージェント・プロセスを起動します。

221.4.1 STARTUP_EXTPROC_AGENTプロシージャ

このプロシージャは、セッション内でextprocエージェント・プロセスを起動します。これを使用すると、実行プロセスのPIDを取得できます。このPIDは、デバッガを使用して実行プロセスに連結するために必要です。

構文

DEBUG_EXTPROC.STARTUP_EXTPROC_AGENT;