よくあるパターンの割に、Eclipse(PDT)での解説しかないので、今後利用する人のために手順を残しておく。 確認した環境は以下の2つだ。
xdebugのインストールにはpeclコマンドを利用するのだが、MacPortsで何も考えずにPHPをインストールすると、pearがサポートされない形になっているので以下のようにして、pearを組み込む。
sudo port install php5 +apache2 +pear
cd /opt/local/apache2/modules
/opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
これができたらpeclコマンドが利用可能になる
pecl install xdebug
としてインストールする。特に迷うことはない。 これでモジュールは用意されたが、まだ組み込みはされていないので、php.iniを修正する。 Macの場合、デフォルトでphp.iniが複数箇所に用意されており、apache経由の場合は、デフォルトでは/private/etc/php.iniを読みにいくようになっているので、そちらに以下を追加する。 (/private/etc/php.iniがない場合は/etc/php.iniを用意)
[xdebug]
zend_extension=/opt/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.default_enable = 1
xdebug.remote_enable = on
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_autostart = 1
ここまでできたら、一旦apacheを再起動し、phpinfo()を呼び出してxdebugが有効になっているか確認する。
これでOK。
なお、上記の設定を行いNetBeansの設定を行ったにもかかわらず、NetBeans側で、「Waiting for connection」が表示された場合は以下のように設定を変更して再度試してほしい。 変更点は、xdebug.remotehostの設定を外すことと、xdebug.remoteconnect_backを設定することだ。
[xdebug]
zend_extension=/opt/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.default_enable = 1
xdebug.remote_enable = on
; xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_autostart = 1
xdebug.remote_connect_back=1
ファイル(F)→プロジェクトプロパティ(T)から以下の画面を表示する。
肝となるのは、開始ファイルの指定のところ。CakePHPでは、ルートディレクトリ直下のindex.phpにアクセスした場合mod_rewriteによって、app/webroot/index.phpに転送されてしまうので、開始ファイルにはそちらを設定しなければならない。
なお、xdebugの接続先ポートを変更したい場合は、オプション画面の「PHP」の設定箇所でデバッガポートを変更すれば良い。 以上で準備完了。
ブレークポイントの設定は、行番号のところをクリックすれば良い。ブレークポイントが設定されると 赤いボタンが表示される。
プロジェクトをデバッグ実行する。 ブレークポイントの箇所にくると、緑色にハイライトされて処理が停止する。
あとは変数の中身なんかも見えるので適宜デバッグすればよろしい。 値は以下のようにデバッグウィンドウに表示される。
現場のコーチに行ったりした際に、コーディングのやり方を見ていると、組織の成熟度が低いもしくはチームとしてゴールに向かうという意識が希薄なところほど、デバッグのやり方も前時代的にやっている気がする。スクリプト系言語は特に差が出やすい。アジャイルがどうだとかこうだとか言う前にデバッグの仕方くらいはベストプラクティスの追求をしたら良いんじゃないだろうか。