【发布时间】:2021-09-24 23:54:19
【问题描述】:
我尝试让 Xdebug 在我的本地机器上运行并遇到以下问题。 Xdebug 没有连接到 VSCode。
我的设置是在 WSL 和 Visual Studio Code 上的 Windows 10 上使用 Docker 容器。
当我尝试 Xdebug 时,我收到以下错误:
[Step Debug] Creating socket for '192.168.16.1:9004', poll success, but error: Operation now in progress (29). ????
⚠️ [Step Debug] Could not connect to client host discovered through HTTP headers, connecting to configured address/port: localhost:9004. :-| ????
⚠️ [Step Debug] Creating socket for 'localhost:9004', poll success, but error: Operation now in progress (29). ????
⚠️ [Step Debug] Creating socket for 'localhost:9004', connect: Cannot assign requested address. ????
???? [Step Debug] Could not connect to debugging client. Tried: 192.168.16.1:9004 (from REMOTE_ADDR HTTP header), localhost:9004 (fallback through xdebug.client_host/xdebug.client_port) :-(`
这些是我的设置:
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9004,
"stopOnEntry": true,
"log": true,
"hostname" : "localhost",
"pathMappings":
{
"/var/www/html/": "${workspaceRoot}/docker/wordpress/public/"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9004
}
]
}
php.ini
[xdebug]
#zend_extension = ./lib/php/20180731/xdebug.so
xdebug.start_with_request = trigger
xdebug.mode = debug
xdebug.discover_client_host = 1
xdebug.log = /tmp/xdebug_remote.log
xdebug.client_port = 9004
Dockerfile
RUN apt-get update \
&& apt-get install -y \
zlib1g-dev \
libicu-dev \
g++ \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl \
&& touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "memory_limit = 128M;\nupload_max_filesize = 64M\npost_max_size = 128M" >> /usr/local/etc/php/conf.d/uploads.ini
RUN docker-php-ext-install pdo pdo_mysql \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
我已经测试了 9003 端口,但它不起作用。当我检查是否有可用的 telnet 连接时,它会连接。我还在防火墙上启用了端口。
编辑:根据@LazyOne 提供的链接,我找到了适合我的配置。
我更新了以下配置并使用了浏览器扩展。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9003,
"stopOnEntry": true,
"log": true,
"host" : //wsl ip
"pathMappings":
{
"/var/www/html/": "${workspaceRoot}/docker/wordpress/public/"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9003
}
]
}
php.ini
[xdebug]
zend_extension = ./lib/php/20180731/xdebug.so
xdebug.start_with_request = trigger
xdebug.mode = debug
xdebug.discover_client_host = 0
xdebug.log = /tmp/xdebug_remote.log
xdebug.client_port = 9003
xdebug.client_host = //wsl ip
【问题讨论】:
-
旁注:你的图片是一样的(第一张图片是错误的)。
-
WSL2 在每次重启时都会更改 IP 地址——这是这里的主要问题。您需要获得正确的 IP 供 Xdebug 使用。检查这些链接作为起点:1)medium.com/@tomasbruckner/… 2)silverf0x00.com/setting-up-xdebug-for-phpstorm-on-windows-wsl2(使用 Xdebug v3 配置参数;这些文章仍在使用 v2 参数)
-
@LazyOne 感谢链接和图像提示。我删除了副本。我知道将动态 ip 与环境变量一起使用。我取得了一些进展,现在错误更改为以下内容:我尝试在 launch.json 中使用 localhost 和 ip 地址 ???? [Step Debug] 连接调试客户端超时,等待:2000 ms。试过:172.20.163.174:9003(通过xdebug.client_host/xdebug.client_port):-(
-
1) 当您尝试调试时,VSCode 是否侦听该端口?使用
netstat或任何类似的 GUI 工具(可以显示当前连接:哪个应用程序侦听哪个端口)来确认。 2)我假设防火墙允许从 WSL 到主机操作系统的传入连接。附言我个人既不使用 VSCode 也不使用 WSL,因此无法在这里给出更准确的建议 :(,仅提供一般建议。
标签: docker visual-studio-code xdebug wsl-2