「xdebugがうまく使えないんですけど」と、2人中2人に聞かれたので、記事にまとめておくことにしました。
環境
- MacOSX 10.14.4
- VisualStudioCode 1.33.1
- PHP 7.2.17
- Laravel 5.5
- xdebug 2.7
- PHP Version Support
全部同じマシン上です!
とにかく動かしたい!!(設定)
xdebugのインストール
# pecl install xdebug
php.ini の修正
# フルパスでかく!
zend_extension="/usr/local/php/modules/xdebug.so"
## xdebugの設定
xdebug.remote_enable=1
xdebug.remote_autostart=1
phpinfoで、xdebugが有効か確認できる模様
<? phpinfo() >
VSCode にxdebugクライアント(Extension)をインストール
- "PHP Debug" をExtensionで検索してインストール
VSCode の設定
- VSCodeの"Debug"で、"Add Configuration"を選択し、"PHP"を選択
php.iniで特に設定していないので、ここも設定しない
デバッグ実行
VSCodeでデバッガ起動
- VSCodeの"Debug"で、設定したConfigurationを選択する → クライアントが起動
PHPサーバを立ち上げ
$ php artisan serve
説明
VSCodeのlaunch.json で、
launch.json
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
}
・・・
と書いてあるせいか、ブラウザでhttp://localhost:9000/
に接続し、「動きません」と2回中2回言われたのですが、ポート9000は、デバッガ(xdebugクライアント)のものなので、ブラウザで接続するのは誤りです。
処理の説明は、Communication Set-up で丁寧に図示されていますが、
- PHPを起動する(大抵はブラウザからリクエストを飛ばす。もちろんartisanコマンドでもOK)
- PHP(のxdebug.so)が、設定に基づきクライアントへ接続する(デフォルトではローカルの9000. DBGPと言うらしい)
- xdebugクライアントが応答し、デバッグ処理が行われる(ブレイクポイントとか)
- PHPが結果を返す
と言う流れとなります。
おわりに
laravelに特化して書きましたが、普通のPHPの説明となります。