【XDebug2×Laravel×Docker】ブレークポイントで止まらない?

Docker
15548337によるPixabayからの画像

前提

・VScodeでphpdebugの設定は済
・DockerでLaravelのWebアプリにアクセス可能
・phpinfoを見てもXDebugの設定が表示される
・上記の状態なのにも関わらず、ブレークポイントで止まらない状態に陥っている

※XDebugのバージョン2系を使った場合の情報なので、ご注意ください

確認ポイント

私がこの状態を解決した際に、確認したポイントを備忘録として記載します!

①VSCodeのphpdebugの設定で「hostname」を指定していないか?

もし、下記のように指定していたら削除(もしくはコメントアウト)する

"hostname" : "localhost"

Dockerを利用している場合、ホスト名は「localhost」ではなく、「host.docker.internal」を指定しているはずなので、誤りとなる。

②php.iniのXDebugの設定で「remote_autostart=1」は指定されている?

もし、下記を指定していなかったら、指定する。

xdebug.remote_autostart = 1

これを指定しないと、URLにパラメータを指定しないとデバッグが開始されないよう。

補足

hostnameの指定に問題があったことを発見するまでの確認手順

  1. Macでリッスンされているポートの確認
    VSCodeでデバッグモードにしてから、下記のコマンドをターミナルで打つ
    sudo lsof -l -P | grep “LISTEN”
    localhost:9021 -> こうなっていたらNG
    *:9021 -> OK
    ※デバッグ用のポート番号に9021を指定している場合
  2. Dockerのコンテナから、デバッグ用ポートにcurlを打ってみる
    「connection refused」と表示されるとNG
    正しい設定なら、VSCodeのブレークポイントで止まる

    ※DockerとXDebugのアクセス方向について
     VSCode(port:9021) <- docker(Webサーバー)
    VSCode側がリッスンしている

ブレークポイントを指定していなくても、毎アクセス毎に勝手に止まってしまう場合

VSCodeのXDebugの設定で「stopOnEntry:true」を指定していないか?
この指定は、全てのリクエストについて入口でストップするかという指定なので、指定したブレークポイントのみで止まってほしい場合は、falseを指定するか、設定自体を削除する

最後に

ブレークポイントで止められないと急に作業効率が落ちるし、焦りますよね;
VSCodeのバージョンアップ、XDebugのバージョンアップでも急に聞いていなかった設定が有効になったりして、今までは正常に動作していたのに、動かなくなったりするようです、、

今後も追加情報あげていきます!

コメント

タイトルとURLをコピーしました