◆ 拡張機能をインストールして Launch currently open script でデバッグ実行する
◆ VSCode の都合でデバッグ実行するにはフォルダを開いてる必要あり
◆ PHP のパス指定は デバッグの設定ファイルに runtimeExecutable キーを追加してパスを書く

普段 PHP はデバッグ実行はしないでシンプルなエディタで書いて var_dump でデバッグしてるくらいでしたが VisualStudio コードだとせっかくデバッグ実行出来るんだしと思ってやってみました

phpdebugvscode

リモートのサーバにコードを置いてブラウザでアクセスしたときのデバッグ実行の方法はよく見かけるのですが ウェブサーバとかなしでただのコマンドラインで実行するプログラムとして扱う場合の情報がほしいのに全然見当たらなかったです

というわけで ここではローカルで CLI 実行するのをデバッグ実行させる方法についてです
実はほとんどインストールするだけでいいのですが パスの都合で動かなくて変に困りました

PHP Debug のインストール

とりあえず PHP Debug の拡張機能をインストールします
VSCode ではデバッグ実行するならフォルダを開かないといけない制限があります
そのフォルダにデバッグ実行用の設定ファイルを作るからです
フォルダを開いたら .vscode というフォルダの中に設定ファイルがあります

エディタ上では 「デバッグ>構成を開く」 で設定ファイルを開けます
インストールするとこの 2 つが自動で設定されています

"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]

上がウェブサーバで実行するようです
Listen してるのでブラウザでアクセスしたらサーバ側からのイベントでデバッグが開始されます

下が今開いている PHP ファイルを実行するものです
通常は XDebug の設定後にこっちを選択して実行するだけでデバッグ実行ができます

XDebug

XDebug をインストールします
Linux ならパッケージマネージャでインストール出来ると思います
fedora なら dnf で php-pecl-xdebug を入れればいいはずです

Windows だと xdebug のサイトから使う PHP のバージョンにあったものをダウンロードします
https://xdebug.org/download.php
パスは自分で指定するのでどこに置いてもいいですが 他のに合わせてext フォルダの中でいいと思います

XDebug の設定で必要なものはこれだけです
zend_extension="C:\Data\runtime\php\php-7.2.1-Win32-VC15-x64\ext\php_xdebug-2.6.0-7.2-vc15-x86_64.dll"
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1

zend_extension の部分は Windows の例です
Linux のパッケージマネージャでインストールしていれば自動で作られていると思います

PHP のパス

基本的にはここまでやれば デバッグ実行したい PHP ファイルを開いてデバッグ開始をすればデバッグ実行されます
ブレークポイントがあればそこで止まってくれて変数の状態をみたりできます

ただ 私の場合は PHP のパスの関係でここから苦労しました
実行自体はされるものの ブレークポイントで止まってくれません
XDebug の設定を変えたりあれこれやってみたのですが 全然です

そこで気になったのが PHP のパスです
Windows 環境だと PHP のバージョンを複数インストールしてる都合で php71 や php72 というコマンド名で各バージョンを実行できるようにしています
デフォルトの php だと今は php7.0 になっていました
php コマンドをそのまま実行しているとしたら XDebug の設定した PHP と違うものが動いてることになります

それはインストール時にありそうと思ったので 設定ファイルで php と検索してでてきたパスはすべて変更しました
こういう感じです
"php.executablePath": "C:\\Data\\runtime\\php\\php-7.2.1-Win32-VC15-x64\\php.exe",
"php.validate.executablePath": "C:\\Data\\runtime\\php\\php-7.2.1-Win32-VC15-x64\\php.exe",

ですが 実はこれらの設定デバッグとは関係ないものでした……
「phpinfo()」 を実行してバージョンを見ると 7.0 が実行されていました

設定の項目がどの拡張機能を動かすものなのかわかるようにしてほしいですね

デバッグ実行の PHP のパスを変える方法

上の方にかいた構成を開くの設定ファイルにパスを指定します
runtimeExecute というキーでパスを指定します

{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"runtimeExecutable": "C:\\Data\\runtime\\php\\php-7.2.1-Win32-VC15-x64\\php.exe",
"port": 9000
}

これで無事動きました