PHP: Advanced PHP Debugger(PHP) (php.net)
(PHP 公式ドキュメントより引用)
APD は進化した PHP デバッガです。PHP コードのプロファイリングや デバッグの機能を提供すること、また完全なスタックトレースを出力する 機能を提供することを目的として作成されています。
インストール手順:
$ pecl install apd
$ cat >> /path/to/php.ini ← エディタ等で以下の内容を php.ini に追加
zend_extension = /path/to/apd.so ← APD モジュールのフルパス(zend_extention 指定の場合は相対パスは不可)
apd.dumpdir = /tmp/apd_log ← APD での解析結果の出力先フォルダ
apd.statement_tracing = 0 ← 行単位トレースをする場合 1 にする。これを有効にすると出力が冗長になります。
Windows 用のコンパイル済み PECL モジュールは http://snaps.php.net/win32/ からダウンロードできます(ファイル名 pecl からはじまるもの)。
利用方法:
デバッグをしたいスクリプトの一番始めに
apd_set_pprof_trace();
を呼ぶと PHP デバッガが利用できます。
PHP デバッガによる結果は php.ini の apd.dumpdir で指定したディレクトリに
pprof.<プロセスID>.<通し番号>
のような形式で保存されます。
そのまま読めなくはないですが、読みやすい形に整形するために pprofp コマンドを利用することができます(APD に付属しています)。
— かかった処理時間の多い関数順に並びかえて出力する
pprofp -R [ファイル名]
— コールツリー(関数の実行順序)を調べる
pprofp -t [ファイル名]
— (上の二つ)+(ビルトイン関数は含めない)+(コールツリーの横に経過時間を表示)
pprofp -Rtci [ファイル名]
その他のオプションについては「APD の pprofp 引数一覧(pprofp -h)」を参照してください。
Windows 用の pprofp についてはAPD のソースに含まれるものが使えるのですが、そのままの形では使いにくいため、実行用のバッチファイルを作成したものを置いておきます。
Windows 対応 pprofp をダウンロード
(APD 1.0.1 ソース付属のものから作成)
– pprofp
– pprofp.bat
– pprof2calltree
– pprof2calltree.bat
の 4 ファイルが入っています。
この4ファイルをそのまま php.exe と同じ場所など適当にパスが通る場所に置いてご利用ください。
参考:
– APD(公式 PHP マニュアル)
– cles::blog