オープンソース/Linux

オープンソース

ITpro

[PHPウォッチ]第11回 PHP4/PHP5にバグ修正版,高機能デバッグ・ツールXdebug登場

PHP用高機能デバッガ/プロファイラXdebug

 アプリケーションの開発で最も時間を要する部分の一つは,デバッグとパフォーマンスのチューニングである。Xdebug(http://www.xdebug.org/)は,変数やスタックを追跡するデバッガとしての機能と,実行時間分析などによりコードのボトルネックを追跡するプロファイラとしての機能をあわせ持つ高機能な拡張モジュールである。

 なお,PHP用のデバッグ環境としては,この他にもPECLに含まれるapdや,dbg(http://dd.cron.ru/dbg/),Zend Studio(http://www.zend.com/store/products/zend-studio.php)などがある。

 Xdebugの最新版としては,9月15日にPHP 5に対応するXdebug 2.0のβ1版がリリースされている。ここでは,このバージョンにおける主な機能を紹介する。

 なお,ここでは例として以下のような簡単なスクリプトを使用する。

function a() {
 for ($i=0; $i<10; $i++) {
  b($i);
 }
}
function b($k) {
 for ($i=0; $i<10; $i++) {
  print "$k $i
\n";
 }
}
for ($i=0; $i<10; $i++) {
a();
}
?>

インストールを行う際には,まず,Xdebug のWebサイトからソースコードを入手し,コンパイルする。Linux上ではコマンドプロンプトで以下のコマンドを実行することでコンパイル・インストールが可能である。

phpize
configure --enable-xdebug
make
make install

 Window環境の場合は,上記サイトからコンパイル済みの実行モジュールを入手するとよいだろう。
 この後,設定ファイルphp.iniに以下の記述を追加する。なお,この例はWindowsの場合である。

zend_extension_ts=C:\php5\ext\php_xdebug.dll
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000

 Xdebugでは,リモートおよびローカルな環境でデバッグが可能であり,デバッガ・クライアントとのインタフェースとしてPHP3組込みデバッガ互換,gdb互換,DBGpの3種類をサポートする。このうち,DBGpは,特定の言語に依存しないデバッガ用の高機能なインタフェースとしてActiveStateと共に策定された規格(http://www.xdebug.org/docs-dbgp.php)であり,Xdebug 2.0以降でサポートされている。

 上記の設定を行った後,デバッガを起動,スクリプトを実行すると,ソースコードレベルのデバッグが可能となる。Xdebugにはデバッガのクライアントとしてdebugclientが付属しているが,コマンドを手で打ち込む必要があり,あまり使いやすいものではない。

写真2●Komodo 3.0.1上でPHPスクリプトのデバッグを行っているところ
 まだ,Xdebug 2.0をサポートするオープンソースの開発環境はリリースされていないが,商用の統合開発環境であるKomodo (http://www.activestate.com/Products/Komodo/)の最新版(Komodo Pro 3.0.1)ではDGBpプロトコルがサポートされている。Komodo Pro 3.0の価格は$295.00とやや高価であるが,用途を教育および非商用に限定したPersonal版($29.95)も用意されている。また,今後,無償で入手可能な開発環境でDBGpをサポートするものが現れてくることも予想される。

 Komodo上で上記のスクリプトを実行した結果を写真2[拡大表示]に示す。このインタフェースでは,ブレークポイントの設定や値の表示などが可能である。

 XDebugは,プロファイラとしての機能も有している。プロファイラを使用するには,以下の設定をphp.iniに記述する。

xdebug.profiler_enable = 1
xdebug.profiler_output_dir= /tmp

写真3●KCacheGrindによるプロファイル結果のグラフィカルな表示
 この状態でスクリプトを実行すると,/tmp 以下に cachegrind.out.xxxxxxxxx(xは数字)というファイルが作成される。このファイルにはプログラムの実行時間や関数のコール回数などのデータが保存されている。XDebug自体には,このプロファイル結果を表示する機能はサポートされていないが,オープンソースのプロファイル結果表示ツールKCacheGrind(http://kcachegrind.sourceforge.net/cgi-bin/show.cgi)と互換性がある形式で出力されるためKCacheGrindを使用してグラフィカルな表示を行い,解析を行うことができる。写真3[拡大表示]に前記のスクリプトを実行した際の結果を表示させたものを示す。

 関数のコール回数,依存関係,実行時間などがグラフィカルに表示され,チューニングが必要なカ所を容易に知ることができる。

 Xdebugはこの他にも以下に示す機能をサポートしている。

  • 変数ダンプのカラー表示機能
  • エラー出力に変数ダンプを含ませる機能
  • コードカバレッジ解析機能
  • スタック追跡機能

     Xdebugを使いこなすには多少の慣れが必要であるが,デバッグやパフォーマンスチューニングを効率的に行うために,極めて強力なツールと言えるだろう。

     今回は,PHP開発関連の話題としてPHP 5.0.2/4.3.9における変更点について紹介し,PEAR/PECL関連の話題としてTextWiki,開発環境に関する話題としてXdebugについて紹介した。次回以降もPHPに関する最新の情報をお届けする予定である。

    廣川類(Rui Hirokawa)

    ■著者紹介 廣川類(ひろかわ・るい)氏  PHPがまだPHP/FIと呼ばれていた1996年にPHPに出会い,以降,ドキュメント翻訳や国際化にかかわっている。著書に『PHP4徹底攻略』(ソフトバンクパブリッシング),『PHP4徹底攻略実戦編』(ソフトバンクパブリッシング)などがある。日本PHPユーザー会(2000年4月設立)ドキュメント部門幹事。

  •  [2004/10/12]

    この記事に対する読者コメント

    コメントに関する諸注意 コメント投稿 コメント一覧