SymfonyアプリケーションをVirtualBox VMで実行しています。 PHPはXDebugで実行されており、適切に構成されています。他の人が同じVMのスナップショットで動作するように管理しているため、これはわかっています。
VS Code XDebugで構成しようとすると、次のlaunch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"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
}
]
}
しかし、「デバッグの開始:XDebugをリッスン」をクリックすると、次のエラーが発生します。
エラー:EADDRINUSE ::: 9000をリッスンします
そのポートを使用しているプロセスを強制終了しようとしましたが、驚いたことに、接続しようとした仮想マシンでした。
この構成で何を見逃しましたか?
私はちょうど自分自身で答えを見つけました。
問題はVirtualboxの構成にありました。
ネットワーク設定で、ポート9000のポート転送があり、デバッガーがローカルで実行されないようにブロックしました。削除すると、問題なく動作しました。
ポート9000は、他のアプリ(MacOsX上のネイティブApacheなど)、VM、Dockerコンテナーなどのデフォルト構成で頻繁に使用されます...
信頼できる解決策は、別のポートを使用することです。たとえば、9001 :)
つまり:
php.ini(xdebug.ini)に次の行を追加します
xdebug.remote_port=9001
また、telnetなどのツールを使用して、9000ポートの使用状況を確認できます。
MacOSでは、ターミナルを使用して、次のようにポート9000で何が開いているかを判別できます。
Sudo lsof -nP -i4TCP:9000 | grep LISTEN
上記のSudoを使用して、ログインアカウントが所有していないプロセスを表示できます。
例えば、私が上記をしたとき、私は得ました:
php-fpm 110 root 6u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 261 _www 0u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 262 _www 0u IPv4 0x5cb825c4aa80be09 0t0 TCP 127.0.0.1:9000 (LISTEN)
その後、次のコマンドでプロセスを終了できます。
Sudo kill 110
次に、ポートを解放して、競合することなくXdebugを起動できるようにします。
それで解決しました。
launch.json
でlaunch
操作を実行しようとしています。これは、vscodeが新しいインスタンスをstartしようとする結果になります。 phpのxdebugをポート9000で。
launch
構成をattach
構成に置き換えてみてください。
それが役に立てば幸い。
私の場合、sonarqubeサーバーは9000で実行されていたため、xdebugを9002に設定しました。