xdebugでのPHPデバック方法

概要

PHPのコア開発者であるDerickRethans氏が開発している、PHPのデバッグ用エクステンション

xdebugインストール方法

root@akat:/home/akat# uname -a
Linux akat 3.2.0-60-generic #91-Ubuntu SMP Wed Feb 19 03:54:44 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@akat:/home/akat# aptitude install php5-xdebug

xdebug設定

root@akat:/home/akat# vi /etc/php5/cgi/conf.d/xdebug.ini
======
zend_extension=/usr/lib/php5/20090626/xdebug.so
;プロファイリングを有効に
xdebug.profiler_enable = 1
;プロファイリング結果の出力ディレクトリ
xdebug.profiler_output_dir = "/var/www/akat.info/tech/htdocs/download"
# %RはリクエストURL
xdebug.profiler_output_name = cachegrind.out.%Rlog
# ログを既存ログの上書きではなく、追加する
xdebug.profiler_append=1
# 1にすると、XDEBUG_PROFILE GET/POSTパラメーターやクッキーを設定することで一部ページのみデバック可能らしい
#xdebug.profiler_enable_trigger=1
======

xdebug解析方法

WinCacheGrind

http://sourceforge.net/projects/wincachegrind/
WinCacheGrind1
IXR_Server->callに4秒かかっていることがわかる
階層がわかるようになっており、これをダブルクリックして進めていくとどこが重いかがわかる
プレフィックスがcachegrind.out.にする必要がある

KCachegrind

http://sourceforge.net/projects/precompiledbin/

kcachegrind
KCachegrind2
Incl.:総実行時間・Self:自分自身の実行にかかった時間
WinCacheGrindよりグラフィカル
プレフィックスをcallgrind.にする必要がある

プログラムに組み込んでメモリ使用量測定

以下をソースに記載する

echo xdebug_memory_usage(), "\r\n";

参考

http://www.plusmb.jp/2009/06/26/3923.html
http://metaboy.blog23.fc2.com/blog-entry-993.html # 特定のページでプロファイラを利用したい場合
http://www.xdebug.org/docs/profiler