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。
NetBeans の設定
NetBeans から xdebug を使うために、ほんの少しだけ設定が必要となる。
NetBeans を起動して、メニューから [NetBeans] -> [環境設定] を開き [PHP] タブをクリックする。[一般] で「PHP 5 インタプリタ」に MAMP の PHP の path を指定する。今回の場合は
/Applications/MAMP/bin/php/php5.4.10/bin/php
となる。
さらに [デバッグ] で「デバッガコンソールを表示」にチェックを入れる。
以上で準備が整った。
デバッグの実行
ステップ実行を試すために、適当なプログラムを用意する。今回は円周率を求めるプログラムを使用させていただいた。
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 ページを別途実行してみた。すると、以下のような感じでメソッドごとの所用時間が表示された。
以上で PHP を効率的にデバッグできる環境が整った。今度はフレームワークを使って開発で開発するときに試してみたい。
コメント