Eclipse 3.4 Ganymede Pleiades All in One の PDT + xampp のセットアップ : デバッガ編
この資料は、Pleiades All in One (Eclipse 3.4 Ganymede) の PDT と xampp の環境で、デバッガの設定をしたときの作業メモです。
Zend Debugger のダウンロード
Zend 社が下記で配布 (無償) している Zend Debugger を入手:
http://downloads.zend.com/pdt/server-debugger/
今回は Windows 版の下記ファイルをダウンロード
http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.14-cygwin...
以前にやったときと同じ要領でインストールし、xampp を再起動すると異常終了してしまう。
apache の error.log を見ると、次のようなエラーメッセージ:
PHP Fatal error: [Zend Optimizer] Zend Debugger must be loaded after Zend Optimizer in Unknown on line 0
Zend Optimizer が必要になった?
Zend Optimizer のダウンロード
再度 Zend 社のサイトに行き、Zend Optimizer を検索して下記ページを発見:
http://www.zend.com/en/products/guard/downloads
Select Release で 「Zend Optimizer v3.3」 をオンにし、Select Package で 「Windows x86 (EXE)」 を選択して、[DOWNLOAD] をクリック。
ログイン情報の入力を求められるので、無償で取得できるアカウントでログインした後、ZendOptimizer-3.3.3-Windows-i386.exe をダウンロード。
ダウンロードした exe ファイルを実行。
ライセンス条件を確認後、インストーラの指示に従い、次の情報を指定する。
- Web サーバーの種類 = Apache 2.x
- php.ini の場所 = C:\phpdev\xampp\apache\bin
- Apache のルート = C:\phpdev\xampp\apache
ファイルがインストールされ、php.ini に Zend Optimizer の設定が追加される。
デバッガの設定
ゼンドジャパンの資料 「デバッグ環境の作成」 の最後 「既存のPHP環境(zend_extension_managerあり)」 に記載の手順に従って、以下のように Zend Debugger の設定を行う。
php.ini に Zend Optimizer の設定エントリが追加されていることを確認する。
今回の環境では、C:\phpdev\xampp\apache\bin\php.ini の [Zend] セクションに次の設定エントリを確認:
zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
zend_optimizer.enable_loader = 0
zend_optimizer.optimization_level=15
Zend Debugger の ZIP を展開してできたフォルダをそのまま C:\phpdev の下に移動し、フォルダ名を ZendDebugger に変更。さらに、PHP のバージョンごとに用意されたサブフォルダの名前を次のように変更:
4_3_x_comp -> php-4.3.x
4_4_x_comp -> php-4.4.x
5_0_x_comp -> php-5.0.x
5_1_x_comp -> php-5.1.x
5_2_x_comp -> php-5.2.x
結果として、C:\phpdev\ZendDebugger フォルダの下に、php-4.3.x、php-4.4.x、php-5.0.x、php-5.1.x、php-5.2.x の各フォルダが並ぶ構造となる。
次に、php.ini に下記エントリを追加:
zend_extension_manager.debug_server_ts="C:\phpdev\ZendDebugger"
zend_debugger.allowed_hosts=localhost
zend_debugger.expose_remotely=always
zend_extension_manager.debug_server_ts の値として設定するフォルダの下に、PHP のバージョン別にフォルダを分けてデバッガのバイナリが格納されている状態となるようにする。
こうすることで、適切なバージョンのデバッガのバイナリが自動的に選択される模様。
以上の設定後、xampp を再起動すると今度は正常に立ち上がった。
PDT で Zend Debugger を動かしてみる
eclipse で、先に作成したサンプルを次のように変更する。
<?php print('Hello, PHP!' . '<br/>'); print('Hello, PHP!' . '<br/>'); print('Hello, PHP!' . '<br/>'); print('Hello, PHP!' . '<br/>'); print('Hello, PHP!' . '<br/>'); ?>
PHP エクスプローラでサンプル (hello.php) ファイルを右クリックし、[デバッグ] - [PHP Web ページ] を順にクリック。
[PHP Web ページのデバッグ] ダイアログボックスが表示される。対象ファイルの Web 側から見たパスが設定されている。そのまま [OK] をクリック。
続いて表示される PHP デバッグパースペクティブへの切り替え確認ダイアログで [はい] をクリックすると、パースペクティブが切り替わる。
特にブレークポイントを設定していなくても、ファイルの最初の実行行で実行が中断される。
あとは、F6 キーのステップオーバー、F5 キーのステップインなど、eclipse のデバッガ UI を利用してデバッガを操作できる。
デバッグの構成の確認
最初のデバッガ起動時に対象ファイルのデバッグ構成が自動的に作られる。
デバッグの構成を確認するには、PHP エクスプローラで PHP ソースを右クリックし、[デバッグ] - [デバッグの構成] を順にクリックする。
この構成の元になるデフォルトの構成設定は、[ウィンドウ] メニューの [設定] - [PHP] - [デバッグ] で確認、設定できる。
XDebug を使ってみる
PDT では、Zend Debugger のほかに XDebug もサポートしている。
xampp には XDebug が最初から付属しているので、php.ini の設定を変えるだけで、XDebug を使用できる。
php.ini の [Zend] セクションのエントリをすべてコメントアウトし、その下にある [XDebug] のエントリのコメントを解除する。
[Zend]
;zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
・・・
;zend_extension_manager.debug_server_ts="C:\phpdev\ZendDebugger"
;zend_debugger.allowed_hosts=localhost
;zend_debugger.expose_remotely=always
[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="C:\phpdev\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\phpdev\xampp\tmp"
xampp を再起動すると、XDebug が使える状態になる。
eclipse のデバッグの構成で、サーバー・デバッガーを [XDebug] に変更すると、XDebug によるデバッグが行える。
XDebug を使用した場合は、別ウィンドウのブラウザが表示される。
また、実行後、[デバッグ] ビューで明示的に終了するまでデバッグセッションは終了しない模様。このあたりの動作が設定で変えられるのかどうかは現状不明。

