NetBeans IDE での PHP ソースコードのデバッグ
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
はじめに
NetBeans IDE for PHP で PHP アプリケーションを正常にデバッグするには、PHP エンジン、Apache ローカル Web サーバー、および XDebug デバッガがインストールされ、PHP 開発用に構成されている 必要があります。
XDebug の有効化
XDebug をインストールしたあと、PHP エンジンで有効にする必要があります。
XDebug を有効にする
PHP エンジンで使用されている php.ini ファイルを探します。phpinfo() を実行すると、このファイルは最初の表で「Loaded Configuration File」という見出しの下に表示されます。
読み込まれている php.ini 内で、次の行をコメント解除するか、または追加します。
zend_extension_ts="<path to the php folder>/php_xdebug-2.0.2-5.2.5.dll"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
XDebug の構成方法の詳細については、ここ をクリックしてください。
注: 指定するパスは、インストール時に定義した対応するファイルの場所と一致していることを確認してください。
XAMPP パッケージを使用している場合は、Zend オプティマイザによって XDebug がブロックされるので、Zend オプティマイザを無効にする必要があります。関連する行を検索し、行を削除するかコメントにします。
注: XAMPP Lite を使用している場合、前述の変更を次の 2 つの php.ini ファイルで行う必要があります。
/xampplite/php/php.ini
/xampplite/apache/bin/php.in
XDebug を使用した PHP のデバッグのしくみ
php.ini ファイルで XDebug が有効になっていると、XDebug は、いつでも PHP プログラムの実行を一時停止および再開できます。プログラムの実行が一時停止しているときは、XDebug でプログラムの現在の状態に関する情報を取得できます。たとえばプログラム変数の値を読み取ることができます。実際にはこれは次のワークフローを意味します。
ユーザーが、PHP ソースコードの実行を一時停止する箇所にブレークポイントを設定します。
この行に達すると、ユーザーは F7 キーと F8 キーを押してスクリプトを 1 行ずつ実行し、変数の値を確認します。
デバッガウィンドウ
デバッグセッションを開始すると、一連のデバッガウィンドウがメインエディタウィンドウの下に開きます。新しいウィンドウを追加するには、「ウィンドウ」>「デバッグ」を選択します。次のウィンドウがあります。
「局所変数」には、初期化された変数、その型、および値が表示されます。
「ウォッチポイント」には、ユーザー定義の式とその値のリストが表示されます。
「呼び出しスタック」には、呼び出された関数のリストが逆の順序で表示されます。最後に呼び出された関数がリストの先頭に表示されます。
「ブレークポイント」には、ブレークポイントが設定されているファイルと行番号のリストが表示されます。
「セッション」には、現在アクティブなデバッグセッションのリストが表示されます。
スレッド
ソース
HTTP クライアント側モニター
デバッグセッション
一般的なデバッグセッションのワークフローを次に示します。
デバッグセッションを実行する
IDE を起動し、プロジェクトを実行して、デバッグするソースコードが含まれるファイルを開きます。
PHP スクリプトの自動実行を停止する行にカーソルを置きます。
ブレークポイントを設定するには、Ctrl-F8 キーを押すか、「デバッグ」>「行ブレークポイントを切り替え」を選択します。
「プロジェクト」ウィンドウで現在のプロジェクトノードに移動し、マウスの右ボタンをクリックしてポップアップメニューから「デバッグ」を選択します。「デバッガ」ウィンドウが開き、ブレークポイントに達するまで、デバッガでプロジェクトが実行されます。
注: 現在のプロジェクトが主プロジェクトに設定されている場合は、「デバッグ」>「主プロジェクトをデバッグ」を選択するか、Ctrl-F5 キーを押すか、または をクリックできます。
「局所変数」ウィンドウに切り替えます。このウィンドウには、現在の関数内で初期化されたすべての変数、その型、および値が表示されます。
関数外の変数の値を表示するには、その変数の出現箇所にカーソルを置きます。ツールチップに変数の値が表示されます。
呼び出しているすべての関数内の行を含めてプログラムを 1 行ずつ実行するには、F7 キーを押すか、「デバッグ」>「ステップイン」を選択し、「局所変数」ウィンドウで変数の値の変化を確認します。
式の変化を確認してプログラムのロジックを確認するには、次の手順で新しいウォッチポイントを定義します。
「ウォッチポイント」ウィンドウを開くには、「ウィンドウ」>「デバッグ」>「ウォッチポイント」を選択するか、Ctrl-Shift-2 キーを押します。「ウォッチポイント」ウィンドウが開きます。
「ウォッチポイント」ウィンドウ内の任意の場所でマウスの右ボタンをクリックし、ポップアップメニューから「新規ウォッチポイント」を選択します。「新規ウォッチポイント」ウィンドウが開きます。
ウォッチ式を入力し、「了解」をクリックします。
これでデバッグ中に追加の確認を行うことができます。
関数内のコードを 1 行ずつ実行しないで関数呼び出しの次の行まで移動するには、Ctrl-F7 キーを押すか、「デバッグ」>「ステップアウト」を選択します。
関数内のコードを 1 行ずつ実行しないで、関数から返される値を取得し、関数呼び出しの次の行まで移動するには、F8 キーを押すか、「デバッグ」>「ステップオーバー」を選択します。
デバッグセッションを一時停止するには、「デバッグ」>「一時停止」を選択します。
デバッグセッションを続行するには、「デバッグ」>「続行」を選択するか、 をクリックします。
デバッグセッションを取り消すには、 をクリックします。
プログラムの最後に到達すると、デバッガウィンドウが閉じます。
デバッグセッションの例
この節では、標準的なデバッグセッションを示します。
次のパラメータで新しい PHP プロジェクトを作成します。
プロジェクトの種類 - PHP アプリケーション
ソースの場所 - デフォルトの htdocs フォルダ
実行構成 - ローカル Web サイト
PHP プロジェクトの設定については、ドキュメント「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)。
<?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 キーを押して関数の実行を取り消します。プログラムは、関数 calculate_factorial() の呼び出しの次の行に戻ります。
注: プログラムで関数 calculate_factorial() の実行が完了するまで F7 キーを押すこともできます。この場合も、呼び出しの次の行に戻ります。
関数 calculate_factorial() が正常に機能することを確認できたので、その実行を省略できます (ステップオーバー)。ステップオーバーするには、F8 キーを押します。プログラムは、関数 calculate_sum() の呼び出しで停止します。
関数 calculate_sum() にステップインするには、F7 キーを押します。
ステップオーバーするには、F8 キーを押します。いずれの場合もデバッガは関数 calculate_sum_of_factorials() の最後の行で停止します。
F7 キーを押します。デバッガは echo 文の行に移動します。
デバッガがプログラムを終了するまで F7 キーを押します。ブラウザウィンドウが開き、プログラムの実行結果が表示されます。
追加ウォッチポイントの使用
プログラムの実行の続きとして追加のウォッチ式を定義できます。これはエラーのキャッチに役立つ場合があります。
コードを次のように更新します (プラスをマイナスに置き換えます)。
function calculate_sum ($argument1, $argument2) {
return $argument1 - argument2;
}
実際には和を求める必要があるが、間違えてこのように入力したとします。
「デバッグ」>「新規ウォッチポイント」を選択するか、Ctrl-Shift-F6 キーを押します。「新規ウォッチポイント」ウィンドウが開きます。
次の式を入力し、「了解」をクリックします。
$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 " . $sum_of_factorials; }
<?php ?> ブロックの先頭にブレークポイントを設定し、デバッグセッション を開始します。
F7 キーを押します。デバッガがプログラムにステップインします。ブラウザウィンドウが開きますが、入力フォームは表示されません。これはデバッガの正常な動作です。Web ページが表示されるためには、デバッガがページのソースコード全体を通過する必要があります。これは実際にはデバッガがコードを 2 回通過することを意味します。1 回目は、HTML 入力フォームを表示するコードが処理されます。2 回目は、PHP コードがステップ実行されます。
デバッガがプログラムの終わりに達し、入力フォームが開くまで F7 キーを押します。
フォームに入力して Enter キーを押します。デバッグセッションは「デバッグセッションの例 」に示すように処理を続行します。
users
@
php.netbeans.org
メーリングリストに登録する ことによって、NetBeans IDE PHP 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。
PHP の学習に戻る