目次
ブレークポイントでとまらない原因と対策/PHP7から8へ移行/VsCode・XDebug
VSCode(Visual Studio Code)でPHPを開発している方が対象です。
VSCodeですでにPHP開発を行ってデバッグもできている環境を前提に書いています。
そんな環境で、PHP7からPHP8にバージョンアップしました。
そうしても、別にエラーとかはでません。
けれど、VSCodeでデバッグしても、ブレークポイントで止まってくれなくなります。
その原因と対策を整理しておきます。
原因1:XDebugとPHPのバージョン不一致
最大の原因は、PHPのバージョンとphp_xdebug.dllのバージョン不一致です。
変更前のバージョンできちんと動いていたphp_xdebug.dllが、バージョンアップ後も必ず動く保証はありません。
バージョンアップ後のPHP.exeに対応するXDebugに差し替える必要があります。
まず、コマンドプロンプトを立ち上げます。
CD困んでで、バージョンアップ後のphpフォルダ(php.exeのある場所)をカレントフォルダにして、以下のコマンドをうちます。
php -i | clip
実行しても、何も表示せず終了しますが、クリップボードに必要な情報をコピーしているので、とりあえず、メモ帳にでも貼り付けておきます。
以下のページ[Installation Wizard]に先ほどの情報を貼り付けます。
そして、画面下部のボタン「Analyse my phpinfo() output」を押します。
すると、以下のようにガイドが表示されるので、その通りにします。
これで、PHPのバージョンにあった、php_xdebug.dllがセットできました。
原因2:PHP.iniのXDebug2と3の違い
PHP7の時のphp_xdebug.dllのバージョンは「2」です。
でも、PHP8.1に対するphp_xdebug.dllのバージョンは「3」です。
php_xdebug.dllのバージョン2と3では、php.iniへの記載方法とデフォルトポートが異なりますので、php.iniとVSCodeのlunch.jsonを修正する必要があります。
まず、php.iniです。
Xdebug2の時はこうでした。
xdebug.remote_enable=true
xdebug.remote_autostart = 1
xdebug.remote_host="localhost"
xdebug.remote_port=9001
xdebug3だとこうなります。
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host="localhost"
xdebug.client_port =9003
注意が必要なのは、portです。
xdebug3では、デフォルトポートが「9003」になっています。
その「Listen for xdebug」のportもxdebug3のデフォルトポートにあわせて、「9003」に書き換えておく必要があります。
これで、PHPを再起動したら、VSCodeでデバッグして、ブレークポイントがちゃんととまるようになっているはずです。
ではでは。