CakePHPアプリをNetBeans+xdebugでデバッグする

 2010/11/22

  • 2012/5/26 追記と修正を行いました

よくあるパターンの割に、Eclipse(PDT)での解説しかないので、今後利用する人のために手順を残しておく。 確認した環境は以下の2つだ。

  • MacOS X(Snow Leopard) + NetBeans6.9.1 + CakePHP1.3 + xdebug2.1.0。ApacheはMAMPではなく、MacPortsでインストール
  • MacOS X(Lion) + NetBeans7.1.2 + CakePHP1.3 + xdebug2.2.0。ApacheはLion標準。PHPはHomeBrewでインストール

PHPにpearを組み込む

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コマンドが利用可能になる

xdebugを組み込む

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.remote_hostの設定を外すことと、xdebug.remote_connect_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

NetBeansの設定を行う。

  1. プロジェクトの実行構成を表示する。

ファイル(F)→プロジェクトプロパティ(T)から以下の画面を表示する。

肝となるのは、開始ファイルの指定のところ。CakePHPでは、ルートディレクトリ直下のindex.phpにアクセスした場合mod_rewriteによって、app/webroot/index.phpに転送されてしまうので、開始ファイルにはそちらを設定しなければならない。

なお、xdebugの接続先ポートを変更したい場合は、オプション画面の「PHP」の設定箇所でデバッガポートを変更すれば良い。 以上で準備完了。

実際にデバッグしてみる。

ブレークポイントの設定は、行番号のところをクリックすれば良い。ブレークポイントが設定されると 赤いボタンが表示される。

プロジェクトをデバッグ実行する。 ブレークポイントの箇所にくると、緑色にハイライトされて処理が停止する。

あとは変数の中身なんかも見えるので適宜デバッグすればよろしい。 値は以下のようにデバッグウィンドウに表示される。

現場のコーチに行ったりした際に、コーディングのやり方を見ていると、組織の成熟度が低いもしくはチームとしてゴールに向かうという意識が希薄なところほど、デバッグのやり方も前時代的にやっている気がする。スクリプト系言語は特に差が出やすい。アジャイルがどうだとかこうだとか言う前にデバッグの仕方くらいはベストプラクティスの追求をしたら良いんじゃないだろうか。

 2010/11/22

サイト内検索


著作

寄稿

Latest post: