PhpStormでXdebugのリモートデバッグを設定する方法
システムエンジニアのにしだです。 最近printデバッグに限界を感じたので、PhpStormでXdebugのリモートデバッグ設定をしてみました。 リモートサーバ環境はCentOS6.4でphp-fpmを使用しています。
Xdebugの主な機能
XdebugはPHP用のデバッグツールで、主に下記の機能があります。
- 実行時プロファイリング
- エラー時のスタックトレースを表示
- var_dumpの出力結果を整形
- リモートデバッグ
Xdebugをインストールする
peclからもインストールできますが、今回はepelから入れます。
1 |
[sourcecode lang="text"] $ sudo yum --enablerepo=epel install php-pecl-xdebug [/sourcecode] |
Xdebugの設定です。 xdebug.remote_portのデフォルト値は9000らしいのですが、php-fpmと被るため9001にしました。
1 |
[sourcecode lang="text"] $ sudo cat /etc/php.d/xdebug.ini ; Enable xdebug extension module zend_extension=/usr/lib64/php/modules/xdebug.so xdebug.default_enable=1 xdebug.remote_enable=1 xdebug.remote_port=9001 xdebug.remote_handler=dbgp xdebug.remote_autostart=1 xdebug.remote_connect_back=1 [/sourcecode] |
php-fpmをリスタートします。
1 |
[sourcecode lang="text"] $ sudo service php-fpm restart[/sourcecode] |
設定が反映されているか確認します。
1 |
[sourcecode lang="text"] $ php -i | grep 'xdebug'[/sourcecode] |
DBGpプロキシをインストールする
環境によっては必要ないかもしれませんが、複数のクライアントマシンから接続するため、DBGpプロキシをインストールします。 Xdebug側ではxdebug.remote_connect_back=1の設定をすることで、複数のIPアドレスからの登録が可能になります。 ダウンロードして配置します。
1 |
[sourcecode lang="text"] $ cd /usr/local/src/ $ sudo wget http://downloads.activestate.com/Komodo/releases/8.5.1/remotedebugging/Komodo-PythonRemoteDebugging-8.5.1-82367-linux-x86_64.tar.gz $ sudo tar xvfz Komodo-PythonRemoteDebugging-8.5.1-82367-linux-x86_64.tar.gz $ sudo ln -s /usr/local/src/Komodo-PythonRemoteDebugging-8.5.1-82367-linux-x86_64/pydbgpproxy /usr/local/bin/ [/sourcecode] |
起動します。
1 |
[sourcecode lang="text"] $ sudo pydbgpproxy -i 172.16.3.101:9001 -d 127.0.0.1:9000 [/sourcecode] |
エラーが出てしまいました。
1 |
[sourcecode lang="text"] Traceback (most recent call last): File "/usr/local/bin/pydbgpproxy", line 109, in import dbgp.serverBase ImportError: No module named dbgp.serverBase [/sourcecode] |
pythonのdbgpモジュールが無いようだったのでインストールします。 まずはsetuptoolsとpipをインストールします。
1 |
[sourcecode lang="text"] $ sudo curl http://peak.telecommunity.com/dist/ez_setup.py | sudo python $ sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python [/sourcecode] |
つぎにpipからdbgpをインストールします。
1 |
[sourcecode lang="text"] $ sudo pip install dbgp[/sourcecode] |
今度は、起動できました。
1 |
[sourcecode lang="text"] $ sudo pydbgpproxy -i 192.168.1.1:9002 -d 127.0.0.1:9001 [/sourcecode] |
PhpStormの設定をする
Debugの設定をします。 xdebug.remote_portのポートを変更したので9001にします。 Serversの設定をします。 ここでリモートサーバー上のディレクトリパスを正しくマッピングする必要があります。 Debug Configurationsの設定をします。 DBGpプロキシの設定をします。 DBGp Proxyの設定をします。
デバッグを開始する
上記の設定が全て終わったらデバッグを開始します。 IDEの登録を実行します。 登録が成功するとリモートサーバ側に下記のようなメッセージが表示されます。
1 |
[sourcecode lang="text"] INFO: dbgp.proxy: Server:onConnect ('192.168.1.3', 52833) [proxyinit -p 9001 -k nishida -m 1] [/sourcecode] |
最後にこの電話マークのボタンを押します。接続が成功すると電話のマークが緑に変わります。 これで変数の内容がPhpStormから参照できたり、ブレークポイントで停止したりするはずです。