Xdebugをセットアップする

Eclipse
PHP

Cake PHP等mod_rewriteを使用する環境ではZend Debuggerは使えません。
そのような環境でも、Xdebugを使えば快適にデバッグすることができます。
以前と違い現行バージョンでは、Eclipse PDTとXdebugの組み合わせで、変数の値が日本語でも文字化けせずに表示されるようになりました。

Windows XAMPP環境でのセットアップ

ここからはXAMPP 1.7.1でセットアップする方法について説明します。
なおXAMPP 1.7.1では、PHPのバージョンは5.2.9、Xdebugのバージョンは2.0.4になります。

php.iniの設定変更

Zend OptimizerとXdebugは共存できないので、php.iniの[Zend]項目をコメントアウトし、[Xdebug]項目のコメントを外します。

 [Zend]
 ;zend_extension_ts = "\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
 ;zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
 ;zend_optimizer.enable_loader = 0
 ;zend_optimizer.optimization_level=15
 ;zend_optimizer.license_path =
 [XDebug]
 ;; Only Zend OR (!) XDebug
 zend_extension_ts="\xampp\php\ext\php_xdebug.dll"
 xdebug.remote_enable=true
 xdebug.remote_host=localhost
 xdebug.remote_port=9000
 xdebug.remote_handler=dbgp
 xdebug.profiler_enable=1
 xdebug.profiler_output_dir="D:\xampp\xampp-1.7.1\tmp"
 

なお、XdebugはZend Extensionとして動作させる必要が有り、通常のextensionとして動作させると一部機能しか動作しません。
下記行のコメントはそのままにしておきます。

 ;extension=php_xdebug.dll
 

変更の反映・確認

apacheを再起動してphpinfoを表示し、Xdebugの項目が存在することを確認してください。

Eclipseのデバッグ構成

サーバー・デバッガにはXdebugを設定してください。

Linux

インストール

下記コマンドでインストールできます。

 #pecl install xdebug

php.iniの設定

例えば、下記のように設定します。

 [Xdebug]
 zend_extension=/usr/lib/php/modules/xdebug.so
 xdebug.remote_enable=true
 xdebug.remote_host=localhost
 xdebug.remote_port=9000
 xdebug.remote_handler=dbgp
 xdebug.profiler_enable=1
 xdebug.profiler_output_dir=/tmp
  • Zend OptimizerやZend Debuggerとは共存できません。
  • xdebug.remote_hostは、zend_debuggerとことなりIPアドレスは一つしか指定できません。

リモートデバッグ

Zend Debuggerのように簡単にデバッグ用クライアントを複数指定できると楽なのですが、Xdebug単体では、デバッグ用クライアントのIPアドレスを1つしか指定できません。

※xdebug 2,1以降では下記設定項目で、任意のIPアドレスから接続可能です。

 xdebug.remote_connect_back = on

(xdebug.remote_hostの設定は無視され、IPアドレスのフィルタリングは効かなくなりますので、別の手段で
アクセス制限をかける必要があります。)

複数の開発者でデバッグ用サーバーを共有するためには、以下のようにいくつか対処方法があります。

ディレクトリ単位で単一の開発用PCを割り当てる

開発用PCごとにディレクトリを分けて、.htaccessで開発用PCのIPアドレスを指定することができます。
.htaccessでディレクトリ単位で、xdebug.remote_hostのIPアドレスを切り替えます。
例えば、下記のように.htaccessを記述します。

 php_value xdebug.remote_host 192.168.0.10

DBGpプロキシーを使って共有する。

Xdebugには、dbgp proxyというプロキシー経由で複数のクライアントマシンから接続する機能を持っています。
リモートでバッグを開始する前に複数のデバッグ用クライアントを区別するためのIDEキーでプロキシーを登録しなければなりません。

Active StateがPythonで実装されたデバッガープロキシーを公開しています。
下記URLから、開発サーバーのOSのPython Remote Debuggingを入手します。
http://aspn.activestate.com/ASPN/Downloads/Komodo/RemoteDebugging
※PHP Remote Debugingではありません。PHP Remote Debugingの中身はXdebugです。

 # tar -xvzf Komodo-PythonRemoteDebugging-5.1.4-30485-linux-x86.tar.gz
 # cd Komodo-PythonRemoteDebugging-5.1.4-30485-linux-x86
 # cd bin

dbgp proxyを実行します。通常はXdebugを動作させるサーバーと同じサーバーで動かすことになるでしょう。
デフォルトでは、IDE登録を127.0.0.1:9001番、Xdebug接続を127.0.0.1:9000で行います。
ただし、デフォルトパラメーターのままだとサーバー外からdbgp proxyに接続できません。
サーバー外からの接続に使用するIPアドレスを指定して実行する必要があります。例えば、開発サーバーのIPアドレスが192.168.1.100とすると、下記のように実行します。

 # ./pydbgpproxy -i 192.168.1.100:9001 -d 127.0.0.1:9000
 INFO: dbgp.proxy: starting proxy listeners.  appid: 10826
 INFO: dbgp.proxy:     dbgp listener on 127.0.0.1:9000
 INFO: dbgp.proxy:     IDE listener on  192.168.1.100:9001

次にIDE側で、dbgpに接続する設定をします。
IDEがEclipseの場合は下記の通りの手順になります。

Window→Preferences→PHP→Installed Debuggersを開き、Xdebugを指定してConfigureボタンをクリックします。
eclipse-pdt-installed-debuggers.png

DBGp Proxy SupportのUse Proxyにチェックを入れ、Proxy Addressに開発サーバーのIPアドレス:ポート番号を入力します。
IDE Keyは開発者名や開発PC名などにすると良いでしょう。デフォルトでは「ECLIPSE_DBGP_開発PCのIPアドレス」になっています。
eclipse-xdebug-dbgp-settings.png

IDEキーの登録に成功すると、dbgpサーバー側で下記のようなメッセージが出力されます。

 INFO: dbgp.proxy: Server:onConnect ('192.168.1.4', 61455) [proxyinit -p 9000 -k ECLIPSE_DBGP_192.168.1.4 -m 0]

※この登録処理はdbgp proxyを立ち上げるたびに行う必要があります。IDEキーの登録が済んでいない場合は下記のような警告が出力されるのでキーの再登録が必要です。

 WARNING: dbgp.proxy: No server with key [ECLIPSE_DBGP_192.168.1.4], stopping request [<__main__.sessionProxy instance at 0xb7b85b4c>]

再登録は、use debug proxyのチェックを一旦外してつけ直すのが簡単でしょう。

なお、PDT2.1時点では複数のリモートでバッグ環境は保存できません。

以上の設定が済めば、ローカルデバッグと同様にリモートデバッグが可能になります。

  • 参考リンク

http://derickrethans.nl/debugging_with_multiple_users.php
http://community.activestate.com/faq/komodo-ide-debugger-proxy-pydbgpproxy

  • XAMPP1.7.4では、Zendはデフォルトでコメントアウトされてました。 — A {2011-03-17 (木) 18:02:58}
カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です