Docker + PhpStorm 環境でXdebugのリモートデバッグが使えるようにするためのメモ
PHPのデバッグには、Xdebugを使っていますが、いつも設定の仕方を忘れてしまうのでメモしておきます。
環境
Docker側の設定
Dockerfileに以下の内容を追加し、xdebugをインストールします。
RUN pecl install xdebug
php.iniに以下の内容を追加します。
[xdebug] zend_extension="/usr/lib64/php/modules/xdebug.so" # 環境に応じて、xdebug.soが置いてある場所を指定します。 xdebug.remote_enable = On xdebug.remote_autostart = Off xdebug.remote_connect_back = Off xdebug.remote_log="/tmp/xdebug.log" xdebug.remote_port=9001 xdebug.remote_host=host.docker.internal
ポイント
* デフォルトでは、XdebugをOffにし、使いたい人だけ、環境変数
* XDEBUG_SESSION_START という名前のパラメータを渡すことで任意のタイミングでリモートデバッグを有効化できました。 ※ XDEBUG_CONFIG
に remote_enable=On
をセットするようにして有効化するようにします。xdebug.remote_autostart
を Offにする必要あり。https://xdebug.org/docs/remote#browser_session
- remote_portはバッティングしないようなportを設定するのが良いです。
- remote_hostは環境に合わせて、PhpStormのデバッグポートを待ち受けているホスト側のIPアドレス、もしくはホスト名を指定します。
そのほか、各設定内容は以下をご確認ください。 https://xdebug.org/docs/remote
PhpStorm側の設定
環境設定
=>言語 & フレームワーク
=>PHP
=>サーバ
を選択- ホスト:
_
- ポート: 環境に応じて設定
- デバッガ:
Xdebug
- パス・マッピングの設定: 環境に応じて設定
- ホスト:
環境設定
=>言語 & フレームワーク
=>PHP
=>デバッグ
を選択3.PHPデバッグ接続のリスニングを使用可能にする
のリスニングを開始
を選択- デバッグ・ポートを
xdebug.remote_port
で設定した値に合わせて設定 - 一度PhpStormの再起動が必要かも
lsofコマンドで、設定したポートで待ち受けているか確認
$ lsof -i:9001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME phpstorm 8875 takapi 467u IPv4 0x5054b8bd5948d975 0t0 TCP *:etlservicemgr (LISTEN)
ここで、適当な場所に、ブレークポイントを置いてステップ実行できれば完了です。
もし、できていなかったら、xdebug.remote_log
で設定したログを見てみると良さそうです。