PL debugger
===========

.. figure:: /images/debug_main.png
   :width: 70% 
   :alt: Debugger page - Parameters tab

   Debugger page - Parameters tab

デバッガーを使用して、
PostgreSQLのPL/pgSQLファンクション、EDB-SPLファンクション、ストアドプロシージャ、およびEDB
Postgres Advanced Serverのパッケージをデバッグできます。デバッガーは、
PostgreSQLインストールの拡張機能として利用でき、 EDB Postgres Advanced
Serverの一部として配布されます。デバッガーを使用するにはスーパーユーザー権限が必要です。

デバッガーを使用する前に、 ``postgresql.conf``
ファイルを変更し、サーバーサイドのデバッガーコンポーネントを\ ``shared_preload_libraries``
パラメーターの値に追加します。

::

   shared_preload_libraries =\$libdir/`other_libraries`/plugin_debugger\

``shared_preload_libraries``
パラメーターを変更した後、サーバーを再起動して変更を適用します。

デバッガーは、ターゲットファンクションまたはプロシージャのインコンテキストデバッグまたは直接デバッグに使用できます。インコンテキストデバッグにデバッガーを使用する場合、プログラムの最初の行にブレークポイントを設定します。セッションがターゲットを呼び出すと、制御がデバッガーに転送されます。ダイレクトデバッグを使用する場合、デバッガーは、ターゲットに必要なパラメーターの入力を求め、コードをステップ実行できます。

インコンテキストデバッグ
------------------------

プログラムの最初の行にブレークポイントを設定するには、デバッグするオブジェクトの名前を右クリックし、
**Debugging > Set Breakpoint** を選択します。
デバッガーウィンドウが開き、別のセッションがプログラムを呼び出すのを待機します。

別のセッションがターゲットを呼び出すと、デバッガーにコードが表示され、ブレークポイントを追加したり、行ごとにステップスルーしたりできます。他のセッションは、デバッグが完了するまで一時停止されます。次に、制御はセッションに返されます。

.. figure:: /images/debug_ic_step_in.png
   :width: 70% 
   :alt: Debugger page - Stack tab

   Debugger page - Stack tab

ダイレクトデバッグ
------------------

直接デバッグにデバッガーを使用するには、ブラウザツリーコントロールで、デバッグするオブジェクトの名前を右クリックし、
**Debugging > Debug** を選択します。

[デバッガー]ダイアログボックスのフィールドを使用して、各パラメーターの値を提供します。

- **Name** フィールドには、正式なパラメーター名が表示されます。

- **Type** フィールドには、パラメーターのデータ型が含まれます。

- パラメーターがNULL値の場合、 **Null?** チェックボックスを選択します。

- **Value** ボックスに式が含まれる場合、 **Expression?**
  チェックボックスをオンにします。

- **Value**
  ボックスに、プログラムに渡すパラメーター値を入力します。パラメーター値を入力するときに、次のことができます。

  - グリッド上の適切なセルに値を入力します。
  - セルを空のままにして、NULLを表します。
  - 2つの一重引用符''を入力して、空の文字列を表します。
  - 2つの一重引用符''だけで構成されるリテラル文字列。
  - PostgreSQL
    8.4以降では、可変個引数ファンクションパラメーターをサポートしています。これらはコンマ区切りの値のリストとして入力でき、必要に応じて引用符またはキャストできます。

- プログラムで **Default Value** ボックスの値を使用する場合、
  **Usedefault?** チェックボックスを選択します。

- **Default Value**
  ボックスには、パラメーターのデフォルト値が表示されます。

プログラムに必要な値を入力したら、 **Debug**
を選択してプログラムのステップ実行を開始します。

.. figure:: /images/debug_step_in.png
   :width: 70% 
   :alt: Debugger page - Stack tab

   Debugger page - Stack tab

選択した値は保存され、次回ダイアログボックスを開くときに表示されます。値をクリアするには、
**Clear All** を選択します。

デバッガーを使用する
--------------------

メインデバッガーウィンドウは、2つのパネルと状況依存のツールバーで構成されています。ツールバーアイコンを使用してブレークポイントを管理し、コードにステップインまたはステップスルーします。

.. csv-table::
  :header: Icon,Action
  :widths: 10,30
  :align: left
  :class: longtable

  Step into,現在強調表示されているコード行を実行します。
  Step over,コード行を実行し、コードによって呼び出されるサブファンクションをステップオーバーします。サブファンクションは実行されますが、ブレークポイントが含まれていない限りデバッグされません。
  Continue/Start,強調表示されたコードを実行し、プログラムがブレークポイントに遭遇するか完了するまで続行します。
  Toggle breakpoint,ブレークポイントを削除せずにブレークポイントを有効または無効にします。
  Clear all breakpoints,プログラムからすべてのブレークポイントを削除します。
  Stop,プログラムの実行を停止します。

デバッガーウィンドウの上部パネルには、プログラム本体が表示されます。行番号の横にある灰色の余白をクリックして、ブレークポイントを追加します。上部パネルの強調表示された行は、これから実行される行です。

.. figure:: /images/debug_main.png
   :width: 70% 
   :alt: Debugger main page

   Debugger main page

デバッガーウィンドウの下部パネルには、プログラムに関する情報を確認できるタブのセットが提供されます。

- **Parameters** タブには、各パラメーターの値が表示されます。

- **ローカル** 変数タブには、プログラム変数の現在値が表示されます。

- **Messages** タブには、サーバーから返されたメッセージが表示されます。

- **Results**
  タブには、プログラムが完了するとサーバーメッセージが表示されます。

- **Stack**
  タブには、呼び出されたがまだ完了していないファンクションのリストが表示されます。

プログラムをステップ実行すると、 **ローカル変数**
タブに各変数の現在値が表示されます。

.. figure:: /images/debug_variables.png
   :width: 70% 
   :alt: Debugger page - Local variables tab

   Debugger page - Local variables tab

サブルーチンにステップインすると、 **Stack**
タブに、各呼び出し元の名前、各呼び出し元のパラメーター値存在する場合、各呼び出し元内の行番号を含むコールスタックが表示されます。

.. figure:: /images/debug_stack.png
   :width: 70% 
   :alt: Debugger page - Stack tab

   Debugger page - Stack tab

呼び出し元を選択してフォーカスをそのスタックフレームに変更し、上部のパネルに呼び出し元の状態を表示します。

プログラムが完了すると、[ **Results**
]タブにサーバーから返されたメッセージが表示されます。プログラムでエラーが発生した場合、[
**Messages** ]タブに詳細が表示されます。

!!!note ``ENABLE_DEBUGGER``
構成オプションがfalseに設定されている場合、デバッガーは無効になっています。
!!!
