PL Debugger
===========

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

   Debugger page - Parameters tab

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

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

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

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

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

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

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

.. figure:: /images/debug_set_breakpoint.png
   :width: 70% 
   :alt: Debugger tab

   Debugger tab

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

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

   Debugger page - Stack tab

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

直接デバッグにデバッガーを使用するには、ブラウザツリーコントロールでデバッグするオブジェクトの名前を右クリックし、\ ``Debugging``
サブメニューから\ ``Debug``
を選択します。デバッガーウィンドウが開き、プログラムに必要な値の入力を求められます。

.. figure:: /images/debug_params.png
   :width: 70% 
   :alt: Debugger parameter dialog

   Debugger parameter dialog

``Debugger``
ダイアログのフィールドを使用して、各パラメーターの値を提供します。

- ``Name`` フィールドには、正式なパラメーター名が含まれます。

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

- ``Null?``
  チェックボックスをチェックして、パラメーターがNULL値であることを示します。

- Valueフィールドに式が含まれる場合、\ ``Expression?``
  チェックボックスをチェックします。

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

- ``Use default?``
  チェックボックスをチェックして、プログラムがデフォルト値フィールドの値を使用する必要があることを示します。

- ``Default Value``
  フィールドには、パラメーターのデフォルト値が含まれています。

プログラムに必要な値を提供し、 ``Debug``
ボタンをクリックしてプログラムのステップ実行を開始します。ここで指定された引数の値は保存されます。値は、次回ダイアログが開いたときに事前入力されます。値をクリアするには、
``Clear All`` ボタンを使用します。

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

   Debugger page - Stack tab

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

メインデバッガーウィンドウは、2つのパネルと状況依存のツールバーで構成されています。ツールバーアイコンを使用してブレークポイントを管理し、コードにステップインまたはステップスルーします。アイコンにカーソルを合わせると、アイコンに関連付けられているオプションを示すツールチップが表示されます。ツールバーオプションは次のとおりです。

.. figure:: /images/debug_toolbar.png
   :width: 70% 
   :alt: Debugger navigation toolbar

   Debugger navigation toolbar

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

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

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

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

   Debugger main page

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

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

- ``Local`` variablesタブには、プログラム変数の現在値が表示されます。

- ``Messages``
  タブには、サーバーから返されたメッセージエラー、警告、情報メッセージが表示されます。

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

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

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

.. 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``
タブに詳細が表示されます。

.. figure:: /images/debug_error_message.png
   :width: 70% 
   :alt: Debugger page - Message tab

   Debugger page - Message tab

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