Xdebugを利用して、PhpStormでボタンをポチポチしてステップ実行したいけど、
なぜか止まらん!!!という際は、
冷静になって、以下の設定項目を確認しましょう。
php -m | grep xdebug
でXdebug
が有効になっているかの確認をしましょう。
コンテナ環境の場合はコンテナ内のphpで確認するように!
docker exec -it <コンテナ名> bash
php -m | grep xdebug # コンテナ内で
xdebug
2020年11月頃から、Xdebug3系がインストールされるようになってきているので、
2系の設定では3系のXdebugでは動きません。
例えば、Docker環境の場合は、以下のように3系の設定にしましょう。
[XDebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
Preferences > PHP > Debug
で設定を確認できます。
Xdebugの設定と合わせるようにしましょう。
php -i | grep xdebug.client_port
xdebug.client_port => 9003 => 9003
デフォルトはdevelopなので、php.ini等に設定を記載する必要があります。
xdebug.mode = debug
CLI Interpreterを設定しないと、PhpStormのXdebugは正しく動きません。
Preferences > PHP より、CLI Interpreterを正しく設定しましょう。
localのPHPとリモートのPHP(DockerやVagrant)では若干設定方法が異なってくるので注意です。
参考
https://pleiades.io/help/phpstorm/configuring-local-interpreter.html > https://pleiades.io/help/phpstorm/configuring-remote-interpreters.html
割とハマリポイントですが、
リモートのCLI Interpreter の場合、Path Mappingの設定が必要です。
Local PathとRemote Pathが共に設定されているか確認しましょう。
設定例(Laravelのプロジェクトが置かれている絶対パスを記載する)
Local Path
/Users/testuser/dev/src/junpeko5/laravel
Remote Path
/var/www/html
Preferences > PHP > Test Frameworks
が設定されていないと、phpunit実行時に影響があります。
CLI InterpreterやPath mappingを正しく設定しておきましょう。
最後に、PHPがDocker環境の場合に、
PhpStormでphpunitを実行したときにXdebugが効かないといった場合の対処法です。
リッスンしている状態で、PhpStormのrunボタンを押し、phpunitを実行すると以下のエラーが出ます。
To fix it set server name by environment variable PHP_IDE_CONFIG and restart debug session.
この場合は、直接的な問題解決法ではありませんが、リッスンを解除し、runボタンではなくDebugボタン(虫マーク )を押して実行するとうまくいきます。
このデバックボタンを押すと、リモート環境(Docker環境)に入った上でphpunitコマンドをいい感じに実行してくれるようです。
以上の対処法で9割は解決できると思います。
それでも解決しない場合は、実行ログを見てみると良いかもです。。