ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Reportsレポート作成のためのユーザーズ・ガイド
11gリリース1(11.1.1)
B61376-01
  ドキュメント・ライブラリへ
ライブラリ
製品リストへ
製品
目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2.10 デバッグ・ツール

この項の各トピックでは、Oracle Reports Builderのデバッグ・レポートについて説明します。

2.10.1 デバッグ・プロセスについて

アプリケーションのデバッグは、アプリケーション・エラーを識別し、修正する反復プロセスです。一般に、アプリケーションのデバッグを適切に行うには、誤りのあるコードを素早く識別し、特定することが不可欠です。

関連項目

第4.14.1項「レポートのデバッグ」

第4.14.2項「デバッグ・モードでのレポートの実行」

2.10.2 PL/SQLインタプリタについて

PL/SQLインタプリタは、デバッグの作業領域であり、ソース・コードの表示、デバッグ・アクションの作成、プログラム・ユニットの実行、インタプリタ・コマンド、PL/SQLおよびSQL文の実行が可能です。

PL/SQLインタプリタでは、デフォルトで、2つのペイン(「ソース」ペインと「インタプリタ」ペイン)が常に開いています。

次のようなデバッグ機能があります。

  • 直接操作のデバッグ: 表示されたソース・テキストを直接操作して、デバッグ・アクションを挿入し、プログラム・データを検査します。

  • 動的実行のフィードバック: Oracle Reports Builderでは、プログラムの実行がデバッグ・アクションによって中断した場合、またはプログラムのステップ実行中に段階的に進められた場合に、現在のPL/SQLソースの位置を自動的に表示し、追跡します。

  • 中断されたプログラム状態の参照: 実行が中断されると、現在のスタックを参照し、変数の状態を参照および変更して、任意のPL/SQL文を実行できます。すべての情報にはシンボリックに(つまり、アドレスや番号ではなく、名前で)アクセスします。

2.10.3 「ソース」ペインについて

PL/SQLインタプリタの「ソース」ペインには、現在「オブジェクト・ナビゲータ」ペインで選択されているプログラム・ユニットの読取り専用コピーが表示されます。

左側のマージンにある番号は、表示されているプログラム・ユニットの行番号に対応します。

また、マージンには、次に示す記号が表示されることもあります。

表2-5 「ソース」ペインのマージンに表示される記号

記号 説明

|


現在のソース位置を指定します。

=>

現在のスコープ位置を指定します。

現在の実行位置を指定します(現在のスコープ位置と異なる場合)。

B(n)

ブレークポイントの位置を指定します。nは対応するデバッグ・アクションIDです。この記号は、行番号列に表示されます。 

T(n)

トリガーの位置を指定します。nは対応するデバッグ・アクションIDです。この記号は、行番号列に表示されます。 


2.10.4 PL/SQLインタプリタのデバッグ・コマンドについて

PL/SQLインタプリタを使用する場合、次のコマンドを実行できます。

表2-6 PL/SQLインタプリタのコマンド

コマンド 説明

CREATE

ファイル・システムまたは現在のデータベースに格納できる新しいライブラリを作成します。

DELETE

次のものを削除します。

  • 現在のデータベースに存在するライブラリ

  • ライブラリのプログラム・ユニット

  • プログラム・ユニット

DESCRIBE

現在のスコープ位置に対してローカルな変数またはパラメータを検査します。この説明には、指定したローカルの名前、タイプおよび値が含まれます。

EXPORT

1つ以上のプログラム・ユニットのソースをテキスト・ファイルに書き込みます。

LIST

プログラム・ユニットのソース・テキスト、トリガーおよびデバッグ・アクションを表示します。

LOG

PL/SQLインタプリタの入力および出力のトランスクリプトを、指定したログ・ファイルに保存します。

RESET

現在のデバッグ・レベルで実行を継続せずに、外部デバッグ・レベルに制御を戻します。

SET

現在のスコープ位置をスタックの指定した枠に変更します。現在のスタック枠から別の枠へ相対的な移動を指定することも、スタック上の特定のサブプログラムへ移動することもできます。次のような方法で、SETをコールします。

  • オブジェクト・ナビゲータで枠エントリを選択します。

  • PL/SQLインタプリタでSETコマンドを入力します。

SHOW

現在のスコープ位置のすべての変数およびパラメータについて、名前、タイプおよび値を表示します。


2.10.5 デバッグ・アクションについて

PL/SQLインタプリタをレポート・コード(トリガー、ユーザー命名プログラム・ユニット、ライブラリなど)から起動するには、コードでデバッグ・アクションを作成します。これらは、PL/SQLプログラム・ユニットの実行を追跡して、それを監視できるようにする命令です。

作成した各デバッグ・アクションには、自動的に一意の数値IDが割り当てられます。デバッグ中に、このIDを参照して、Oracle Reports Builderのデバッグ・コマンドで特定のデバッグ・アクションを参照、表示または変更できます。

1つ以上のデバッグ・アクションに関する詳細情報を表示できます。詳細情報には、そのID、ソースの位置、および有効化されているかどうかなどの情報が含まれます。また、特定のデバッグ・アクションを一時的に無効化し、必要に応じて後でもう一度有効化できます。

デバッグ・アクションには、ブレークポイントとデバッグ・トリガーの2種類があります。

ブレークポイントは、プログラム・ユニットの特定のソース行で実行を中断し、PL/SQLインタプリタに制御を渡します。

ブレークポイントを作成して、特定のデバッグ領域を識別します。たとえば、ブレークポイントを行10と行20に作成すると、この領域内のコードがデバッグされます。

ブレークポイントでは、ブレークポイントを指定した行に到達する直前に中断が発生します。この時点で、PL/SQLインタプリタの機能を使用して、プログラムの状態を検査または変更できます。完了したら、GOコマンドまたはSTEPコマンドで実行を再開するか、RESETコマンドを使用して実行を強制終了します。

デバッグ・トリガーは、一般的な形式のデバッグ・アクションで、PL/SQLコードのブロックをプログラム・ユニット内の特定のソース行に関連付けます。デバッグ・トリガーを検出すると、Oracle Reports Builderはデバッグ・トリガー・コードを実行します。

デバッグ・トリガーを作成して、次のいずれかの場合のデバッグ時にPL/SQLコードのブロックを実行します。

  • プログラムの実行がプログラム・ユニット内の単一行に到達したとき(たとえば、現在のソースの位置、行5、行23など)

  • PL/SQLインタプリタに制御が渡るとき(つまり、ブレークポイント、プログラムのステップ実行などによって、プログラムの実行が中断されるたび)

  • すべてのPL/SQLソース行が実行されているとき

デバッグ・トリガーは、特に条件付きブレークポイントとして有効です。トリガー内から例外DEBUG/BREAKをコールできます。たとえば、次のデバッグ・トリガーは、my_procの行10に条件付きブレークポイントを設定します。これは、ローカルNUMBER変数my_salが5,000を超えた場合にのみ条件と一致します。

PL/SQL>line 10 is
+> IF Debug.Getn('my_sal') > 5000 THEN
+> Raise Debug.Suspend;
+> END IF;

2.10.5.1 デバッグ・アクションの作成について

PL/SQLインタプリタでは、次の方法で、デバッグ・アクション(ブレーク・ポイントとデバッグ・トリガー)を作成できます。

  • PL/SQLインタプリタでプログラム・ユニットが開いているときに、Oracle Reports Builderメニュー・バーで「プログラム」の後に「ブレークポイント」または「デバッグ・トリガー」を選択します。

  • PL/SQLインタプリタの「ソース」ペインを右クリックし、「ブレークポイント」またはデバッグ・トリガーを選択します。

  • 「オブジェクト・ナビゲータ」ペインにデバッグ・アクションを挿入します。

  • 「インタプリタ」ペインでコマンドを入力します。

デバッグ・アクションを作成する場合、実行可能なプログラム・ユニットのソース行に、ブレークポイントまたはデバッグ・トリガーを連結します。ソース行は、PL/SQLコンパイラがコードを生成する1つ以上の文が含まれる場合に実行可能とみなされます。たとえば、代入文とプロシージャ・コールが含まれたソース行は実行可能ですが、コメント、空白行、宣言またはNULL文が含まれたソース行は実行可能ではありません。

関連項目

第4.14.3項「ブレークポイントの設定」

第4.14.4項「デバッグ・トリガーの設定」

2.10.6 現在の実行位置について

現在の実行位置は、実行する次のPL/SQLソース行を指定します。これは、一般にプログラム・カウンタ(PC)と呼ばれているものに相当します。

プログラムの実行中に制御がPL/SQLインタプリタに渡された場合(たとえば、ブレークポイントに達した場合やステップ実行で行っている場合)、PL/SQLインタプリタの「ソース」ペインには、現在の実行位置に対応するソース行が自動的に表示されます。

現在の実行位置を手動で表示するには、「インタプリタ」ペインでLISTコマンドを使用します。

たとえば、次のように入力します。

.LIST PC

これで、「ソース」ペインに現在の実行位置が表示されます。

2.10.7 現在のスコープ位置について

現在のスコープ位置は、PL/SQLインタプリタがローカル変数およびパラメータを検索する場所を指示します。この位置は、スタック上での1つのPL/SQLサブプログラムの現在の実行位置に対応します。

プログラム・ユニットの実行が中断するたびに(たとえば、デバッグ・アクションによって)、スコープ位置はスタックの一番下にあるサブプログラムの実行位置に初期化されます。

実行が中断された後で、現在のスコープ位置を、スタック上の別の枠に変更できます。これにより、呼び出し連鎖内の別のサブプログラムのローカル変数を表示できます。

関連項目

第4.14.14項「現行のスコープ位置の表示」

2.10.8 デバッグ・レベルについて

デバッグ・アクションがプログラムの実行を中断すると、PL/SQLインタプリタが制御を受け取り、デバッグ・レベルlを設定します。デバッグ・レベルでは、コマンドやPL/SQL文を入力し、中断されたプログラムの状態を検査および変更したり、実行を再開したりできます。

デバッグ・レベルでインタラクティブに入力したPL/SQLコード自体も中断できるので(たとえば、別のブレークポイントを検出した場合)、デバッグ・レベルをネストすることができます。デバッグ・レベルを区別しやすくするため、レベルには番号が付けられます。最も深くネストされたレベルには、一番大きな番号が割り当てられます。番号は、最も外側のレベルでゼロから始まります。

0番または最も外側のレベルは通常、トップ・レベルと呼ばれます。トップ・レベルは、プログラム・ユニットが最初にコールされた最も外側のレベルであるため、関連付けられたプログラム状態はありません。トップ・レベルからコールされたコードが中断された場合、デバッグ・レベル1が設定されます。同様に、デバッグ・レベル1からコールされたコードが中断されると、デバッグ・レベル2が設定され、後に続きます。

PL/SQLインタプリタのコマンド・プロンプトには現在のデバッグ・レベルが反映されます。PL/SQLインタプリタがトップ・レベルより下のレベルへ入ると、プロンプトには、現在のデバッグ・レベル番号を含むプリフィックスが表示されます。たとえば、PL/SQLインタプリタのコマンド・プロンプトは、デバッグ・レベル1で次のように表示されます。

(debug 1)PL/SQL>

2.10.9 実行時のコード変更について

実行時に、現在のスタック上にない任意のプログラム・ユニット、メニュー項目コマンドまたはトリガーを変更し、コンパイルできます。


注意:

現在のスタック上の項目を変更するには、最初にRESETコマンドを発行してスタックをクリアする必要があります。

実行時のコード変更はOracle Reports Builderには通知されませんが、最終的な修正の実装へ戻る前に、可能な修正をインタラクティブにテストすることができます。

関連項目

第4.14.13項「実行時におけるコードの変更」