備忘録のため,内容の正当性については責任を持ちません。

PHP でプログラムを書くとき、どうやってデバッグしているだろうか。未だに echo や var_dump を頻用している人も多いんじゃないだろうか?と言うことで、NetBeans と xdebug を使って PHP をステップ実行 (トレース) し、変数の中身を確認しながらデバッグする手順をまとめておく。


前提

今回は以下の環境を前提にしている。

xdebug の有効化

MAMP の PHP にははじめから xdebug が入っているので、それを有効化するだけで良い。

まず php.ini の場所を確認する。

$ find /Applications/MAMP -name "php.ini"
/Applications/MAMP/bin/php/php5.2.17/conf/php.ini
/Applications/MAMP/bin/php/php5.3.20/conf/php.ini
/Applications/MAMP/bin/php/php5.4.10/conf/php.ini
/Applications/MAMP/conf/php5.2.17/php.ini
/Applications/MAMP/conf/php5.3.13/php.ini
  :

今回の場合は /Applications/MAMP/bin/php/php5.4.10/conf/php.ini となる (最初 /Applications/MAMP/conf/php5.4.10/php.ini の方を編集していてはまった……)。

編集する前に、念のためバックアップを取っておく。

$ cp /Applications/MAMP/bin/php/php5.4.10/conf/php.ini /Applications/MAMP/bin/php/php5.4.10/conf/php.ini.orig

そして以下のように編集、追記する。

$ diff -u /Applications/MAMP/bin/php/php5.4.10/conf/php.ini.orig /Applications/MAMP/bin/php/php5.4.10/conf/php.ini
--- /Applications/MAMP/bin/php/php5.4.10/conf/php.ini.orig      2013-09-05 22:52:42.000000000 +0900
+++ /Applications/MAMP/bin/php/php5.4.10/conf/php.ini   2013-09-05 22:53:16.000000000 +0900
@@ -1164,4 +1164,12 @@
 xcache.coveragedump_directory = ""

 [xdebug]
-;zend_extension="/Applications/MAMP/bin/php/php5.4.10/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
+zend_extension="/Applications/MAMP/bin/php/php5.4.10/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
+xdebug.remote_enable=on
+xdebug.remote_handler=dbgp
+xdebug.remote_mode=req
+xdebug.remote_host=localhost
+xdebug.remote_port=9000
+xdebug.idekey=netbeans-xdebug
+xdebug.profiler_enable=1
+xdebug.profiler_output_dir="/Applications/MAMP/tmp"

編集できたら Apache をリロードする。

$ /Applications/MAMP/Library/bin/apachectl -k graceful

有効になったか、phpinfo() で確認する。

$ echo "<?php phpinfo();" > /Applications/MAMP/htdocs/phpinfo.php

http://localhost:8888/phpinfo.php にアクセスして、以下のように xdebug の項目が表示されていれば OK。

phpinfo()

phpinfo()

NetBeans の設定

NetBeans から xdebug を使うために、ほんの少しだけ設定が必要となる。

NetBeans を起動して、メニューから [NetBeans] -> [環境設定] を開き [PHP] タブをクリックする。[一般] で「PHP 5 インタプリタ」に MAMP の PHP の path を指定する。今回の場合は

/Applications/MAMP/bin/php/php5.4.10/bin/php

となる。

NetBeans の設定

NetBeans の設定

さらに [デバッグ] で「デバッガコンソールを表示」にチェックを入れる。

以上で準備が整った。

デバッグの実行

ステップ実行を試すために、適当なプログラムを用意する。今回は円周率を求めるプログラムを使用させていただいた。

NetBeans で PHP プロジェクトを追加して、index.php にプログラムを作成する。用意できたら、[プロジェクトをデバッグ] アイコンをクリックしてみると、ステップ実行が始まる。[ステップイン] アイコンまたは [F7] キーでを押すと行ずつ進んでいく。その際ウィンドウ下部の「変数」欄で、変数の値を随時確認することができる。

ステップ実行の様子

ステップ実行の様子

webgrind の導入

せっかくなので、xdebug のデバッグ結果を webgrind でプロファイリングしてみる。

webgrind のサイトからコードをダウンロードする。

$ curl -O https://webgrind.googlecode.com/files/webgrind-release-1.0.zip

解凍して MAMP の公開ディレクトリに配置する。

$ unzip webgrind-release-1.0.zip
$ mv webgrind /Applications/MAMP/htdocs/

http://localhost:8888/webgrind/ にアクセスすると、webgrind が表示される。先ほどの円周率のプログラムだとステップ数が多すぎて表示しきれないので、FuelPHP の welcome ページを別途実行してみた。すると、以下のような感じでメソッドごとの所用時間が表示された。

webgrind

webgrind

以上で PHP を効率的にデバッグできる環境が整った。今度はフレームワークを使って開発で開発するときに試してみたい。


コメント

コメントする




CAPTCHA