SE_BOKUのITな日常

SE_BOKUが知ってること・勉強したこと・考えたことetc

ブレークポイントでとまらない原因と対策/PHP7から8へ移行/VsCode・XDebug

目次

ブレークポイントでとまらない原因と対策/PHP7から8へ移行/VsCodeXDebug

VSCodeVisual Studio Code)でPHPを開発している方が対象です。

VSCodeですでにPHP開発を行ってデバッグもできている環境を前提に書いています。

そんな環境で、PHP7からPHP8にバージョンアップしました。

そうしても、別にエラーとかはでません。

けれど、VSCodeデバッグしても、ブレークポイントで止まってくれなくなります。

その原因と対策を整理しておきます。

 

原因1:XDebugPHPのバージョン不一致

最大の原因は、PHPのバージョンとphp_xdebug.dllのバージョン不一致です。

変更前のバージョンできちんと動いていたphp_xdebug.dllが、バージョンアップ後も必ず動く保証はありません。

バージョンアップ後のPHP.exeに対応するXDebugに差し替える必要があります。

 

まず、コマンドプロンプトを立ち上げます。

CD困んでで、バージョンアップ後のphpフォルダ(php.exeのある場所)をカレントフォルダにして、以下のコマンドをうちます。

php -i | clip

実行しても、何も表示せず終了しますが、クリップボードに必要な情報をコピーしているので、とりあえず、メモ帳にでも貼り付けておきます。

以下のページ[Installation Wizard]に先ほどの情報を貼り付けます。

xdebug.org

そして、画面下部のボタン「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」になっています。

 

今度は、VSCodeのlaunch.jsonです。

その「Listen for xdebug」のportもxdebug3のデフォルトポートにあわせて、「9003」に書き換えておく必要があります。

これで、PHPを再起動したら、VSCodeデバッグして、ブレークポイントがちゃんととまるようになっているはずです。

ではでは。