Xdebugを使い倒す5つのTIPS

By uchida - 09/06/26 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

PHPでの開発時に大変お世話になっているのがこのXdebugです。
とてもこのXdebugは人気が高くネットで検索すると沢山の導入事例や使い方などが公開されています。
その他の開発環境やツールを連動させることにより、さらに使い易くなり開発の手助けをしてくれます。
今回はXdebugをより便利に使うための方法をご紹介します。
 

そもそもXdebugとは

Xdebugとは高機能なPHPのデバッグツールです。
PHPのデバッグでおなじみの「var_dump」を見やすくしてくれたり、ボトムネックになっている処理を見つけたり、ステップ実行できたりします。
その他のデバッグツールとしてはZendDebuggerがあります。
 

基本的な設定方法

php.iniもしくはxdebug.iniを編集すると動作が変わります。
また、コマメに設定を変更したい場合は

ini_set('xdebug.設定項目', '設定値');

※ini_setでは変更が効かない項目(overload_var_dumpなど)もあります。
 
細かな設定項目はXdebugのマニュアルで確認できます。
 

1.var_dumpをカスタマイズする

Xdebugを導入するとデフォルトでvar_dumpの出力結果が変わります。
改行されて見やすくなります。
 
しかし、いつものvar_dumpの方がいいという場合は、

xdebug.overload_var_dump = 0

で通常の表示に戻ります。
 

2.エラー時に任意の値を表示させる

通常だとエラーが発生した行、メソッドなどを表示されてそれをおってバグの場所を選定できるのですが、Xdebugでは表示させる項目を簡単に増やすことができます。
 
設定サンプル

xdebug.collect_vars=on
xdebug.collect_params=4
xdebug.dump_globals=on
xdebug.dump.GET=*
xdebug.dump.POST=*
xdebug.show_local_vars=on

この設定でメソッドのパラメータ・POST・GETの値を確認できるようになりますので大変便利です。
いろいろ試してみて、自分に合うのを見つけてください。
 
エラーでない時にも表示したい場合は

xdebug_dump_superglobals();

をPHPコードに埋め込むことで可能です。
 

3.ステップ実行で簡単デバッグ

私はこれがしたいが為にXdebugを導入しました。
前までVBとかJAVAでずっとステップ実行に頼った開発をしていたので、PHPでの開発も是非入れたかったからです。
各開発環境用にプラグインが用意されており、私はEclipse+PDTで利用しています。
以下設定です。

    xdebug.remote_autostart=off
    xdebug.remote_enable=on
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    xdebug.remote_host=localhost
    xdebug.remote_port=9000

 
Eclipseの場合エディタの行番号の横をダブルクリックすると青い丸がつきまして、これがブレイクポイントとなりここで処理がとまり、変数などを確認できます。
4
 
これで、プロジェクト外のコード(フレームワークなど)のコードも調査できるので、とても便利です。私の場合はこれがないと怖くて解析できません。
 

4.プロファイリングで重い処理を見つける

以下の設定をするとプロファイリングファイルを残してくれます。

    xdebug.profiler_append=0
    xdebug.profiler_enable=1
    xdebug.profiler_enable_trigger=0
    xdebug.profiler_output_dir=/tmp
    xdebug.profiler_output_name = xdebug%Rlog 

※output_nameの%RはリクエストURLになります。
 
apacheをリロードして、PHPを実行すると/tmp/にプロファイリングデータが生成されています。これを解析ツールで読み込むと、重い処理や何度も実行されて効率の悪い処理を簡単に見つけることができます。
2
 
解析ツール
Windows用 WinCacheGrind
Linux用 KcacheGrindIndex
ブラウザ用 XHProf
 

5.本番環境との同期をする

最後になりましたが、プロジェクトのリリースが終わった後から一段とこのXdebugが威力を発揮してくれます。
開発後にバグを調査するためにデバッグコードを埋め込むのは、とてもオススメできません。そんな時にステップ実行が役にたちます。
 
しかし、本番サーバーではデバッガを起動するには負荷が掛かりますので、開発環境での利用がよいと思います。ですので、本番環境と開発環境とでしっかりプログラムその他のデータを同期する必要があります。
 
効率よく同期をするのであれば、Subversion/Gitなどのバージョン管理がオススメです。必要なものだけを同期してくれるので手間を大幅に省く事ができます。私の場合はSubversionを利用しています。その他にはFTPやSSHなどがあります。これらでも同期は出来ますが、設定ファイルや、ログ、不要なバイナリデータを省く手間や、信頼できるツールを探すのは結構骨が折れます。私もこれらをツールで利用して泣きたくなるようなことが度々あります。まだ、バージョン管理していない方がいらっしゃいましたら、一度チャレンジしてみてください。