ローカルMacに、Laravelを入れた。
最近はphpでもデバッグできるらしい。
「printデバッグよりも、全然効率が違いますから」なんて書いてあると気になる。
VS Code上で、PHPのデバッグとコード補完が利用できるらしい。
今さら気が付いたのだが、本やブログなどを見ると、SailだのDockerだの、
環境を一まとめにしたツールを使っている。
解説もそれを前提としているので、環境が違うと動かなかったりする。
だから、最初は、面倒であっても、その本やブログで紹介されているツールと同じのを使うのがいいのかな。
※私の環境では、そういったものは使用していない。
他のブログや本で動かなかった時のヒントになればと思います。
インストールメモ。
環境:
・Mac OS 12.5.1 M1
・php 8.0
・Laravel 9
・VS CODE
・XDebug 3.1.5 (2系、3.2系と微妙に設定が違うようです)
・サーバは、php artisan serve
VS Codeは、インストーラーがあったので、それを利用。
私のバージョンでは、VS Codeを起動して、[Code]->[基本設定]->[機能拡張]と進み、
PHP Debugと、PHP IntelliSenseがセットになった、PHP Extension Packとかいうのをインストールした。
XDebugは、
pecl install xdebug
でできた。
そして、ローカルなphpファイルにブレークポイントを設定してデバッグ実行すると、
そのブレークポイントを設定した地点で実行が停止した。
ここまではよかったのだが、サーバー上で実行するとブレークポイントで止まってくれない。
ブログや本とはパスなどが違い、なかなか動いてくれない。
色々やってやっと動いた。数時間は掛かった。
XDebugとサーバを連動させることが肝であった。
以下は、私の環境でできたものである。
【重要かつ基本】
php -vやphpinfoなどの出力でXDebugが組み込まれているか調べること。
これが一番大事。つまりキングです。
設定ファイルが複数あるケースで、どれが反映しているかわからないときは、
実際に読み込まれている情報を確認すること。
そして、(あれば)ログファイルのエラーを見ること。
php.ini
先頭に
zend_extension="xdebug.so"
これでよかった。homebrewでインストールした先のパスを調べて書かなくても私の環境では問題ない。
コマンドで確認できた。
ファイル末尾に、
[xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
この2行追加。
これがないと、サーバーで実行した時にブレークポイントで停止してくれない。
Xdebug.client_hostや、xdebug.client_portを指定するとエラーになった。
これはバージョンにもよるのだろう。ちなみに私のはXDebug 3.1.5
ここが一番のハマリだった。
つまり、xdebug.modeとxdebug.start_with_requestだけ設定して、他のものは設定しない。大抵、remote_hostやclient_hostを設定する例が載っている。
今回、デフォルトで動くものがほとんどだった。逆に、値を設定してエラーになるケースが本当に多かった。
私の知識不足なんだろう。おそらく、ツールの配布元など、オーソリティーを詳しく調べると分かるものもあったのかも。
launch.json (VS CODE)
[...]
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
},
[...]
デフォルトでいい。ローカルなので"pathMappings"は必要ない。
下手に入れるとエラー(Class Not Found)になりがち。
デバッグ実行は、launch.jsonを開いたタブで実行。
ソースファイルだと階層違いでClass Not Foundエラーになった。
ファイルが見つからないときは、隠しフォルダの.vscodeを削除して、
もう一回、launch.jsonを作成する。(VS Codeのキャッシュエラー?)
次は、myPHPAdmin行ってみよう!
以上
【昔話】
そういえば、昔(20年くらい前?)、Visual Studioのエディタに補完機能が付いていて、
それで色々と表示される候補を見て、クラスライブラリの使い方を覚えていったっけなぁ。
VCのエディタが便利で、Windowsが関係ないCのソースコードなんかにも、使っていた。
秀丸はその時あったのかな? 先輩はMifesというエディタの方が多かったと記憶している。
なんでもvimでやるのが「通」だと思っていたのだが、結局マスターできず。
今回、VS CodeにVimプラグインがあったので、早速インストールして喜んでいる。