Laradock × VSCode × Windows環境のXdebug設定

Laradock × VSCode × Windows環境のXdebug設定

LaradockVisual Studio Codeを使って、PHPデバッグする方法。(Windows環境)

Laradockの設定

Laradockでは、以下の3ファイルを修正する。

Laradockの.envファイル

Laradockトップディレクトリ\.env### WORKSPACE #############################################
:
WORKSPACE_INSTALL_XDEBUG=true### PHP_FPM ###############################################
:
PHP_FPM_INSTALL_XDEBUG=true

Workspaceのxdebug.iniファイル

Laradockトップディレクトリ\workspace\xdebug.ini
:
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.cli_color=1

PHP-FPMのxdebug.iniファイル

Laradockトップディレクトリ\php-fpm\xdebug.ini
:
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.cli_color=1

VSCodeの設定

プロジェクトのlaunch.jsonを修正する。

:
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "pathMappings": {
                "/var/www": "${workspaceRoot}"
            },
            "port": 9000
        },
:

/var/wwwの部分は、サーバ側のLaravelトップディレクトリ(artisanがあるディレクトリ)に合わせる。

コンテナをリビルドする

設定ファイルの修正が終わったら、以下のコマンドでLaradockコンテナをリビルドする。

$ cd [Laradockトップディレクトリ]
$ docker-compose build workspace php-fpm

ちょっと時間がかかるので放置。

VSCodeでデバッグする

あとはソースコードにブレークポイントを貼って、デバッグを開始し、ブレークポイントで止まれば完了!

ブレークポイント以外でやたらブレークする場合

デフォルトのままだと、頻繁に以下のような例外でブレークすると思われる。

The payload is invalid.

そのまま「続行」を繰り返すと、ちゃんと仕掛けたブレークポイントまで進む。

どうやらLaravel5では、常にリクエストCookieを暗号化→復号化して使っていて、Xdebugの発行するCookieが問題となるらしい。

それ以外にもちょろちょろ止まって欲しくないところで止まるので、うっとおしいからlaunch.jsonを追加で修正する。

:
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "pathMappings": {
                "/var/www": "${workspaceRoot}"
            },
            "ignore": [
                "/var/www/vendor/*/*.php"
            ],
            "port": 9000
        },
:

ちなみにとある自分の環境では以下のような状態。

:
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "pathMappings": {
                "/var/www": "${workspaceRoot}"
            },
            "ignore": [
                "/var/www/vendor/laravel/framework/src/Illuminate/Encryption/*.php",
                "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/*.php",
                "/var/www/vendor/laravel/framework/src/Illuminate/Filesystem/*.php"
            ],
            "port": 9000
        },
:

なんか思ってたワイルドカードの使い方が出来ず、冗長だけど…。
他にブレークして欲しくないファイルがあれば、追加していく感じ。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください