【问题标题】:Xdebug connection with VSC with WSL2 and DockerXdebug 与带有 WSL2 和 Docker 的 VSC 连接
【发布时间】: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


【解决方案1】:

这些消息中的每一条都有指向文档的链接(右侧的图标),您都阅读了吗?

现在,Xdebug 告诉您它无法连接。这要么是因为 IDE 没有在监听,要么是因为 Xdebug 试图连接到错误的 IP 地址。

xdebug.discover_client_host 几乎不能用于 WSL2(和 Docker),因此您需要使用 xdebug.client_host 来设置正确的 IP 地址,并设置 xdebug.discover_client_host=no

“正确的”IP 地址是什么,取决于您的设置,但 IIRC,您可以在 Windows 命令行(不在 WSL2 中)上使用 ipconfig /all 来查找。

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2022-07-12
    • 2020-02-19
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多