2010年4月20日火曜日

[PHP]ZendDebuggerからXdebugに乗り換えてみた

EclipsePDTと古いZendDebuggerの相性がよろしくなさそうなので、Xdebugに乗り換えてみました。Windows上でPHPのバージョンは都合により5.2を使ってます。

Xdebugのインストールは、xdebug.orgより適切なモジュール(DLL)をダウンロードします。DLLは、適当なフォルダにコピーした場合には、php.iniに「zend_extension_ts=<DLLのフルパス>」と指定し、PHPのextフォルダに入れたときには「DLLのファイル名」と指定すればよいです。

php.iniの設定はリモートデバッグを有効にするのと、リモートホストの設定だけでよいです。リモートホストの設定は1つだけしかできないようです。基本的にはローカルにあるサーバーにPHPとXdebugを入れてデバッグするという運用が想定されているものだと考えられます。

xdebug.remote_enable = On
xdebug.remote_host = localhost

リモートホストの設定は、XdebugとEclipseとの間の設定なので、Webサーバーがバーチャルホストでホスト名で参照してあっても、ローカルにあるならば「localhost」と書けばよいようです。
あとは、Eclipseのデバッグの設定で、サーバーのデバッガの設定を「XDebug」にして、「Break at First Line」はオフ(チェックしない)に設定したほうがよいようです。

基本的にはこれでデバッグできますが、Eclipseのデバッグの設定で、ファイルのmappingが正しくないとブレイクポイントで停止などの操作ができません。PHPサーバーの設定にあるPath Mappingのところにプロジェクトとサーバー上のファイルパスを設定すればよいです。
EclipseのプロジェクトがローカルWebサーバーのDocument Rootの配下あるならば、プロジェクトのファイルパスと同じになるはずので、Path on Serverのところはプロジェクトのファイルパスを手で入力すればよいでしょう。
もし、Path Mappingのところがうまくいかないときは、php.iniに「xdebug.remote_log=<ログファイルのフルパス>」を設定して、ブレイクポイントをどう設定しているかを確認してみるとよいようです。

あと、ZendDebuggerと違うところは、Xdebugの場合にはデバッグを開始するとセッションを張りっぱなしになります。そのため、1度デバッグを開始すればセッションを見失わない限りEclipseのデバッガと連動し続けます。
動きもXdebugのほうが軽いのですし、いまのところ安定して使えてます。ただ、変数の中身の表示され方がちょっと違ったりするのですが、慣れれば問題ないでしょう。