NetBeans IDE での PHP ソースコードのデバッグ
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
はじめに
NetBeans IDE for PHP で PHP アプリケーションを正常にデバッグするには、PHP エンジン、Apache ローカル Web サーバー、および XDebug デバッガがインストールされ、PHP 開発用に構成されている 必要があります。XDebug の動作に問題がある場合、「XDebug に関する NetBeans の Wiki 」を参照したり、
users
@
php.netbeans.org
のコミュニティーに問い合わせたりしてください。
NetBeans IDE での XDebug による PHP デバッグの動作方法
NetBeans IDE から XDebug を実行すると、PHP プログラムの実行は、ブレークポイントを設定した各行で一時停止します。プログラムの実行が一時停止しているときは、プログラム変数の値など、プログラムの現在の状態に関する情報を XDebug で取得できます。実際にはこれは次のワークフローを意味します。
PHP ソースコードの実行を一時停止すべき各行にブレークポイントを設定します。
デバッグセッションを開始します。 ブレークポイントが設定された行に到達したら、F7 キーおよび F8 キーを押して、スクリプトを 1 行ずつ実行します。デバッガウィンドウ でアプリケーションの状態を監視します。
デバッグセッションを閉じます。
NetBeans IDE での XDebug の使用方法の詳細なワークフローについては、「デバッグセッション 」を参照してください。
NetBeans IDE には、ファイルのステップ実行に役立つデバッグツールバーがあります。「ツールバーとエディタの操作 」を参照してください。
デバッグオプション
NetBeans IDE の「オプション」には、PHP をデバッグするための特定のデフォルト設定を変更するタブが含まれています。これらのオプションを開くには、「ツール」>「オプション」(Mac の場合は「NetBeans」>「設定」) に移動し、「PHP」オプションを選択して、「デバッグ」タブを選択します。
注: 「デバッグ」タブは NetBeans IDE version 7.1 で導入されました。以前のバージョンの NetBeans ではデバッグオプションは「一般」>「PHP」タブにあります。version 7.1 のすべてのオプションが以前のバージョンで利用できるとは限りません。
このパネルで次のオプションを変更できます。
このチュートリアルでは、ウォッチポイントを任意で有効にすることを除いて、これらの設定を変更する必要はありません。
ツールバーとエディタの操作
エディタではファイルの内容を表示できます。したがって、デバッグ中にエディタとデバッガツールバーを組み合わせて使用することで、実行中にコードをステップ実行して、ファイルの内容がブラウザ内の動作にどのように影響しているのかを確認できます。
デバッガツールバーの使用
デバッグセッションを実行すると、エディタの上にデバッガツールバーが表示されます。
ツールバーでは次のアクションを実行できます。
デバッガセッションを終了 ( )
デバッグセッションを終了
一時停止 ( )
デバッグセッションを中断
再開 ( )
デバッグセッションを再開
ステップオーバー ( )
実行文をステップオーバー
ステップイン ( )
関数呼び出しにステップイン
ステップアウト ( )
現在の関数呼び出しからステップアウト
カーソルまで実行 ( )
カーソル位置まで実行
ブレークポイントの設定
デバッガの実行を停止する位置を指定するには、ファイル内にブレークポイントを設定します。
重要: XDebug を使用するには、PHP コード内でブレークポイントを設定する必要があります 。
ブレークポイントを設定するには、エディタで、ブレークポイントを設定する行の左マージンをクリックします。
ブレークポイントを削除するには、ブレークポイントバッジ ( ) をクリックします。
ブレークポイントは一時的に無効にすることもできます。これを行うには、ブレークポイントバッジを右クリックし、「ブレークポイント」>「✓ 有効」の選択を解除します。これにより、ブレークポイントが無効状態に切り替わり、左マージンにグレーのバッジ ( ) が表示されます。
デバッグの実行中にブレークポイントに到達すると、デバッガはそこで実行を停止するので、デバッグウィンドウで変数を確認し、ブレークポイントに続くコードをステップ実行できます。
ツールチップの確認
デバッグセッション中にデバッガが中断されているときは、エディタ内で PHP 識別子の上にマウスポインタを置いてツールチップを表示できます。選択した呼び出しスタックフレーム内で識別子が有効である場合は、その値が表示されます。PHP の式を選択することもできます。式の値がツールチップに表示されます。
「デバッガ」ウィンドウ
デバッグセッションを開始すると、一連のデバッガウィンドウがメインエディタウィンドウの下に開きます。デバッガウィンドウでは、コードをステップ実行しながら変数と式の値を追跡したり、実行中のスレッドの呼び出しスタックを確認したり、ソース URL を確認したり、また複数のデバッグセッションを同時に実行している場合はセッション間を切り替えたりできます。
すべてのデバッガウィンドウは IDE の「ウィンドウ」>「デバッグ」メニューからアクセスできます。デバッグセッションがアクティブになったら、デバッガウィンドウの使用を開始できます。
「セッション」ウィンドウ
「セッション」ウィンドウには、現在アクティブなデバッグセッションが表示されます。PHP のデバッグセッションを開始すると、「セッション」ウィンドウに PHP デバッガのエントリが表示されます。
NetBeans IDE では、複数のデバッガセッションを同時に実行することもできます。たとえば、Java と PHP のプロジェクトを同時にデバッグできます。この場合、「セッション」ウィンドウに 2 つのセッションがリストされているのが確認できます。
現在のセッション、つまりデバッガツールバーを使用して制御できるセッションは、ほかのアイコンよりも目立つアイコン ( ) で示されます。複数のセッション間を切り替えるには、現在のセッションにするセッションをダブルクリックするか、右クリックして「現在に設定」を選択します。
注: 現在作業中のセッションが中断されている場合、セッションを切り替えることは推奨されません。
また、右クリックポップアップウィンドウでは、セッションを終了したり (右クリックして「完了」を選択)、現在のスレッドのデバッグとセッション内のすべてのスレッドのデバッグとを切り替えたり (右クリックして「スコープ」>「すべてのスレッドをデバッグ」または「現在のスレッドをデバッグ」) できます。
「変数」ウィンドウ
デバッガが中断されているとき、「変数」ウィンドウには、選択した呼び出しスタックフレームの現在の window オブジェクトの変数が表示されます。現在のウィンドウの各変数について 1 つのノードが表示されます。スーパーグローバルは別個のノードでグループ化されます。
コードをステップ実行しているときに一部の局所変数の値が変わることがあります。このような局所変数は「局所変数」ウィンドウにボールドで表示されます。「値」列の中を直接クリックして、変数の値を手動で変更することもできます。
「ウォッチポイント」ウィンドウ
ウォッチポイントを設定すると XDebug が不安定化するため、推奨されません。ウォッチポイントはデフォルトで無効になっています。ただし、ウォッチポイントを設定する場合は、「追加ウォッチポイントの使用 」を参照してください。
「呼び出しスタック」ウィンドウ
「呼び出しスタック」ウィンドウには、実行中に行われた一連の呼び出しが一覧表示されます。デバッガが中断されているとき、「呼び出しスタック」ウィンドウには、一連の関数呼び出し、つまり呼び出しスタック が表示されます。最初の中断では、最上位のスタックフレームが自動的に選択されます。ウィンドウ内の関数呼び出しをダブルクリックすると、エディタ内でその行に移動します。呼び出しが PHP クラスに対して実行された場合、その呼び出しをダブルクリックすると、「ナビゲータ」ウィンドウもその行に移動します。
呼び出しスタックフレームをダブルクリックして選択したら、「変数 」ウィンドウと「ウォッチポイント 」ウィンドウでそのフレームの変数や式の値を確認できます。
「スレッド」ウィンドウ
「スレッド」ウィンドウは、現在アクティブな PHP スクリプトと、PHP スクリプトがブレークポイントで中断されているか実行中かを示します。スクリプトが実行中の場合、ブラウザウィンドウに移動して、スクリプトを操作する必要があります。
「ソース」ウィンドウ
「ソース」ウィンドウには、デバッグセッション用に読み込まれたすべてのファイルとスクリプトが表示されます。「ソース」ウィンドウは現在、PHP プロジェクトでは機能しません。
「ブレークポイント」ウィンドウ
「ブレークポイント」ウィンドウを使用すると、IDE 内で設定したすべてのブレークポイントを表示できます。
「ブレークポイント」ウィンドウでは、コンテキストウィンドウでブレークポイントを有効または無効にすることができます。ブレークポイントグループを作成することもできます。
デバッグセッション
一般的なデバッグセッションのワークフローを次に示します。
デバッグセッションを実行する
IDE を起動し、デバッグするソースコードが含まれるファイルを開きます。 デバッガを一時停止する必要がある各行にブレークポイントを設定します。ブレークポイントを設定するには、行の先頭にカーソルを置き、Ctrl-F8/⌘-F8 キーを押すか、「デバッグ」>「行ブレークポイントを切り替え」を選択します。 「プロジェクト」ウィンドウで現在のプロジェクトノードに移動し、マウスの右ボタンをクリックしてポップアップメニューから「デバッグ」を選択します。「デバッガ」ウィンドウが開き、ブレークポイントに達するまで、デバッガでプロジェクトが実行されます。
注: 現在のプロジェクトが主プロジェクトに設定されている場合は、「デバッグ」>「主プロジェクトをデバッグ」を選択するか、Ctrl-F5 キーを押すか、または をクリックできます。 「局所変数」ウィンドウに切り替えます。このウィンドウには、現在の関数内で初期化されたすべての変数、その型、および値が表示されます。 関数外の変数の値を表示するには、その変数の出現箇所にカーソルを置きます。ツールチップに変数の値が表示されます。 呼び出しているすべての関数内の行を含めてプログラムを 1 行ずつ実行するには、F7 キーを押すか、「デバッグ」>「ステップイン」を選択し、「局所変数」ウィンドウで変数の値の変化を確認します。 式の変化を確認してプログラムのロジックを確認するには、次の手順で新しいウォッチポイントを定義します。
「ウォッチポイント」ウィンドウを開くには、「ウィンドウ」>「デバッグ」>「ウォッチポイント」を選択するか、Ctrl-Shift-2 キーを押します。「ウォッチポイント」ウィンドウが開きます。 「ウォッチポイント」ウィンドウ内の任意の場所でマウスの右ボタンをクリックし、ポップアップメニューから「新規ウォッチポイント」を選択します。「新規ウォッチポイント」ウィンドウが開きます。 ウォッチ式を入力し、「了解」をクリックします。
これでデバッグ中に追加の確認を行うことができます。
重要: ウォッチポイントを設定するには、PHP オプションの「デバッグ」タブ でウォッチポイントを有効にする必要があります。
関数内のコードを 1 行ずつ実行しないで関数呼び出しの次の行まで移動するには、Ctrl-F7/⌘-F7 キーを押すか、「デバッグ」>「ステップアウト」を選択します。 関数内のコードを 1 行ずつ実行しないで、関数から返される値を取得し、関数呼び出しの次の行まで移動するには、F8 キーを押すか、「デバッグ」>「ステップオーバー」を選択します。 デバッグセッションを一時停止するには、「デバッグ」>「一時停止」を選択します。 デバッグセッションを続行するには、「デバッグ」>「続行」を選択するか、 をクリックします。 デバッグセッションを取り消すには、 をクリックします。
プログラムの最後に到達すると、デバッガウィンドウが閉じます。
デバッグセッションの例
この節の例では、ステップインやステップオーバー機能などの基本的なデバッガ機能を示します。また、典型的なデバッガウィンドウの出力も示します。
次のパラメータで新しい PHP プロジェクトを作成します。
プロジェクトの種類 - PHP アプリケーション ソースの場所 - デフォルトの htdocs フォルダ 実行構成 - ローカル Web サイト
PHP プロジェクトの設定については、ドキュメント「PHP プロジェクトの設定 」を参照してください。
セッション中のホットキーの使用を有効にするには、カーソルをプロジェクトノードに置き、ポップアップメニューから「主プロジェクトとして設定」を選択します。 index.php ファイルに次のコードを入力します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>NetBeans PHP debugging sample</title> </head> <body> <?php $m=5; $n=10; $sum_of_factorials = calculate_sum_of_factorials ($m, $n); echo "The sum of factorials of the entered integers is " . $sum_of_factorials; function calculate_sum_of_factorials ($argument1, $argument2) { $factorial1 = calculate_factorial ($argument1); $factorial2 = calculate_factorial ($argument2); $result = calculate_sum ($factorial1, $factorial2); return $result; } function calculate_factorial ($argument) { $factorial_result = 1; for ($i=1; $i<=$argument; $i++) { $factorial_result = $factorial_result*$i; } return $factorial_result; } function calculate_sum ($argument1, $argument2) { return $argument1 + $argument2; } ?> </body> </html>
このコードには次の 3 つの関数があります。
calculate_factorial () 関数calcualte_sum () 関数 calculate_sum_of_factorials () 関数。この関数は calculate_factorial 関数を 2 回呼び出してから calcualte_sum () 関数を 1 回呼び出し、階乗の和を返します。
PHP ブロックの先頭にブレークポイントを設定します (Ctrl-F8/⌘-F8)。
<?php
デバッグを開始するには、 をクリックします。デバッガがブレークポイントで停止します。 F7 キーを 3 回押します。関数 calculate_sum_of_factorials () を呼び出している行でデバッガが停止します。「局所変数」ウィンドウに、変数 $m と $n 、およびそれらの値が表示されます。
関数 calculate_sum_of_factorials() にステップインするには、F7 キーを押します。デバッガが関数 calculate_sum_of_factorials () 内のコードの実行を開始し、関数 calculate_factorial() の呼び出しで停止します。
「局所変数」ウィンドウに、関数 calculate_sum_of_factorials () 内で宣言されている局所変数 $argument1 と $argument2 が表示されます。
F7 キーを押します。デバッガが、関数 calculate_factorial() からコードの実行を開始します。「呼び出しスタック」ウィンドウに、関数への呼び出しのスタックが逆の順序で表示されます。最後に呼び出された関数がリストの先頭に表示されます。
F7 キーを押してループにステップインします。「変数」ウィンドウで変数の値を確認します。
コードが正常に機能することを確認したら、Ctrl-F7/⌘-F7 キーを押して関数の実行を取り消します。プログラムは、関数 calculate_factorial() の呼び出しの次の行に戻ります。
注: プログラムで関数 calculate_factorial() の実行が完了するまで F7 キーを押すこともできます。この場合も、呼び出しの次の行に戻ります。
関数 calculate_factorial() が正常に機能することを確認できたので、その実行を省略できます (ステップオーバー)。ステップオーバーするには、F8 キーを押します。プログラムは、関数 calculate_sum() の呼び出しで停止します。
関数 calculate_sum() にステップインするには、F7 キーを押します。 ステップオーバーするには、F8 キーを押します。いずれの場合もデバッガは関数 calculate_sum_of_factorials() の最後の行で停止します。
F7 キーを押します。デバッガは echo 文の行に移動します。 デバッガがプログラムを終了するまで F7 キーを押します。ブラウザウィンドウが開き、プログラムの実行結果が表示されます。
追加ウォッチポイントの使用
プログラムの実行の続きとして追加のウォッチ式を定義できます。これはエラーのキャッチに役立つ場合があります。
警告: 追加のウォッチポイントを設定すると、XDebug が不安定化します。ウォッチポイントはデフォルトでデバッグオプション で無効になっています。
コードを次のように更新します (プラスをマイナスに置き換えます)。
function calculate_sum ($argument1, $argument2) { return $argument1 - argument2; }
実際には和を求める必要があるが、間違えてこのように入力したとします。 「デバッグ」>「新規ウォッチポイント」を選択するか、Ctrl/⌘-shift-F7 キーを押します。「新規ウォッチポイント」ウィンドウが開きます。 次の式を入力し、「了解」をクリックします。
$factorial1+$factorial2
新しい式が「ウォッチポイント」ウィンドウに表示されます。
デバッグセッションを実行します。デバッガが次の行で停止したときに、
return $result; 「ウォッチポイント」ウィンドウ内の式の値と、「局所変数」ウィンドウ内の $result の値を比較します。これらの値は同じはずですが、現時点では異なります。
この例は非常に簡単で、ウォッチポイント使用の概念を示しています。
PHP と HTML の混在
PHP と HTML の両方のブロックを含むコードをデバッグできます。「
デバッグセッションの例 」の節の例では、値はハードコードされています。値を入力するための HTML 入力フォームをコードに追加します。
<?php ?> ブロックの上に次の HTML コードを追加します。
<form action="index.php" method="POST"> Enter the first integer, please: <input type="text" name="first_integer"/><br/> Enter the second integer, please: <input type="text" name="second_integer"/><br/> <input type="submit" name="enter" value="Enter"/> </form>
HTML 入力フォームについては、HTML 入力フォーム を参照してください。
<?php ?> ブロックの先頭で、次の行を置き換えます。
$m=5; $n=10; $sum_of_factorials = calculate_sum_of_factorials ($m, $n); echo "The sum of factorials of the entered integers is " . $sum_of_factorials;
次のコードに置き換えます。
if (array_key_exists ("first_integer", $_POST) && array_key_exists ("second_integer", $_POST)) { $result = calculate_sum_of_factorials ($_POST["first_integer"], $_POST["second_integer"]); echo "Sum of factorials is " . $result; } ブレークポイントを <?php ?> ブロックの先頭に設定し、デバッグセッション を開始します。 F7 キーを押します。デバッガがプログラムにステップインします。ブラウザウィンドウが開きますが、入力フォームは表示されません。これはデバッガの正常な動作です。Web ページが表示されるためには、デバッガがページのソースコード全体を通過する必要があります。これは実際にはデバッガがコードを 2 回通過することを意味します。1 回目は、HTML 入力フォームを表示するコードが処理されます。2 回目は、PHP コードがステップ実行されます。 デバッガがプログラムの終わりに達し、入力フォームが開くまで F7 キーを押します。 フォームに入力して Enter キーを押します。デバッグセッションは「デバッグセッションの例 」に示すように処理を続行します。
スクリプトと Web ページの両方をデバッグすることは可能で、Web ページはローカルまたはリモートのいずれかでデバッグできます。リモートのデバッグの場合、残念なことに、リモートサーバー上のデバッグされる php ファイルは、ローカルマシン上で実行中の NetBeans IDE で開いているファイルと同じではありません。したがって、NetBeans のデバッガサポートは、サーバーパスとローカルパスをマップできる必要があります。ただし、多くの問題があるため、パスマッピングは個々のすべてのシナリオについて自動的に解決できるわけではありません。したがって、NetBeans 6.7 以降では、個々の実行構成について、プロジェクトの設定 を使用してパスマッピングを手動で定義できます。また、プロキシサーバーが存在する場合はこれを指定したり、デバッグセッションが開始する URL を指定したりすることもできます。この URL を指定しない場合、デバッグはインデックスファイルから開始します。
パスマッピングを設定してカスタムのデバッグ URL を有効にする
「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、コンテキストメニューからプロジェクトの「プロパティー」を開きます。 「プロジェクトプロパティー」ダイアログで「実行構成」カテゴリに移動します。 「詳細」ボタンをクリックします。「詳細 Web 構成」ダイアログが開きます。 パスマッピング用のサーバーパスとプロジェクトパスを追加します。 「デバッグ URL」で、次のいずれかを選択します (デフォルトを選択したままにしないようにします)。
「毎回聞く」: デバッグセッションを開始したとき、IDE によって URL の入力が求められます。 「Web ブラウザを開かない」: ブラウザを開いて URL を手動で入力することをユーザーに求めます (GET/POST XDEBUG_SESSION_START 変数が必要です)。 デバッグ用のプロキシサーバーを使用する場合、「デバッガプロキシ」セクションにサーバーのホスト名とポートを入力します。
詳細については、NetBeans for PHP ブログの投稿「Path Mapping in PHP Debugger 」を参照してください。
users
@
php.netbeans.org
メーリングリストに登録する ことによって、NetBeans IDE PHP 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。
PHP の学習に戻る