LaradockとVisual 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 }, :
なんか思ってたワイルドカードの使い方が出来ず、冗長だけど…。
他にブレークして欲しくないファイルがあれば、追加していく感じ。