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 で設定したログを見てみると良さそうです。