PHP Xdebug、VSCode、Docker & MacOS - 调试器未断开连接
PHP Xdebug, VSCode, Docker & MacOS - debugger not disconnecting
我遇到了一个奇怪的问题,似乎是在 Xdebug 扩展更新时开始出现,或者 Visual Studio 代码收到更新。
当调试器在 VSCode 中处于活动状态时,网站工作正常,停止调试器时,docker 容器中的 Xdebug 扩展似乎无法断开连接。并且网站卡在加载状态。
当调试器在 VSCode 中停止时尝试访问站点时,我在 xdebug.log 中收到以下消息。
[318] Log opened at 2022-04-08 12:19:15.819009
[318] [Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9001.
[318] [Step Debug] INFO: Connected to debugging client: host.docker.internal:9001 (through xdebug.client_host/xdebug.client_port). :-)
[318] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/html/index.php" language="PHP" xdebug:language_version="7.4.0" protocol_version="1.0" appid="318" idekey="VSCODE"><engine version="3.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2022 by Derick Rethans]]></copyright></init>
这似乎是 Xdebug 扩展仍在尝试连接(成功)到 9001 的侦听端口。
但是当用lsof -i :9001
检查时,端口没有在主机上监听。
PHP Xdebug 设置:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.remote_handler=dbgp
xdebug.idekey=VSCODE
xdebug.start_with_request=yes
xdebug.log=/tmp/xdebug.log
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
xdebug.discover_client_host=0
launch.json 设置:
{
"version": "0.2.0",
"configurations": [{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"log": false,
"externalConsole": false,
"pathMappings": {
"/var/www/html": "${workspaceFolder}",
},
"ignore": [
"shared/vendor/*"
]
},
]
}
我也尝试过不同的 client_host
设置。
为 en0 接口添加了一个别名,以从 Xdebug 访问主机 IP。
sudo ifconfig en0 alias 10.128.128.128 255.255.255.0
设置的变化似乎无法消除这个问题,有人有什么想法吗?
4.8.0 版本解决了这个问题。
mac 票的 Docker:https://github.com/docker/for-mac/issues/6235
解决问题的版本:
英特尔:https://desktop-stage.docker.com/mac/main/amd64/78146/Docker.dmg
苹果硅:https://desktop-stage.docker.com/mac/main/arm64/78146/Docker.dmg
我遇到了一个奇怪的问题,似乎是在 Xdebug 扩展更新时开始出现,或者 Visual Studio 代码收到更新。
当调试器在 VSCode 中处于活动状态时,网站工作正常,停止调试器时,docker 容器中的 Xdebug 扩展似乎无法断开连接。并且网站卡在加载状态。
当调试器在 VSCode 中停止时尝试访问站点时,我在 xdebug.log 中收到以下消息。
[318] Log opened at 2022-04-08 12:19:15.819009
[318] [Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9001.
[318] [Step Debug] INFO: Connected to debugging client: host.docker.internal:9001 (through xdebug.client_host/xdebug.client_port). :-)
[318] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/html/index.php" language="PHP" xdebug:language_version="7.4.0" protocol_version="1.0" appid="318" idekey="VSCODE"><engine version="3.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2022 by Derick Rethans]]></copyright></init>
这似乎是 Xdebug 扩展仍在尝试连接(成功)到 9001 的侦听端口。
但是当用lsof -i :9001
检查时,端口没有在主机上监听。
PHP Xdebug 设置:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.remote_handler=dbgp
xdebug.idekey=VSCODE
xdebug.start_with_request=yes
xdebug.log=/tmp/xdebug.log
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
xdebug.discover_client_host=0
launch.json 设置:
{
"version": "0.2.0",
"configurations": [{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"log": false,
"externalConsole": false,
"pathMappings": {
"/var/www/html": "${workspaceFolder}",
},
"ignore": [
"shared/vendor/*"
]
},
]
}
我也尝试过不同的 client_host
设置。
为 en0 接口添加了一个别名,以从 Xdebug 访问主机 IP。
sudo ifconfig en0 alias 10.128.128.128 255.255.255.0
设置的变化似乎无法消除这个问题,有人有什么想法吗?
4.8.0 版本解决了这个问题。
mac 票的 Docker:https://github.com/docker/for-mac/issues/6235
解决问题的版本:
英特尔:https://desktop-stage.docker.com/mac/main/amd64/78146/Docker.dmg
苹果硅:https://desktop-stage.docker.com/mac/main/arm64/78146/Docker.dmg