VSCodeでxdebugを利用する on ローカル開発 with Laravelプロジェクト


「xdebugがうまく使えないんですけど」と、2人中2人に聞かれたので、記事にまとめておくことにしました。

環境

全部同じマシン上です!

とにかく動かしたい!!(設定)

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 で丁寧に図示されていますが、
1. PHPを起動する(大抵はブラウザからリクエストを飛ばす。もちろんartisanコマンドでもOK)
2. PHP(のxdebug.so)が、設定に基づきクライアントへ接続する(デフォルトではローカルの9000. DBGPと言うらしい)
3. xdebugクライアントが応答し、デバッグ処理が行われる(ブレイクポイントとか)
4. PHPが結果を返す
と言う流れとなります。

おわりに

laravelに特化して書きましたが、普通のPHPの説明となります。