xDebug无法使用docker,vscode和WSL 2

时间:2020-05-26 15:53:29

标签: php docker docker-compose xdebug wsl-2

我不确定问题出在哪里,它只是行不通。

路由似乎正常工作,我在nginx conf文件中有一个服务器名称。例如test.com。可行。

我的项目位于ubuntu的根目录中,而不是在安装文件夹中。

我不确定还能尝试什么。

xdebug.ini

[XDebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so

xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9002
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=0
xdebug.remote_host=soapboxtest.com
xdebug.idekey=VSCODE
xdebug.remote_autostart=1
xdebug.remote_log=/usr/local/etc/php/xdebug.log

launch.json

{
  "name": "Listen for XDebug",
  "type": "php",
  "request": "launch",
  "port": 9002,
  "log": true,
  "externalConsole": false,
  "pathMappings": {
    "/var/www": "${workspaceRoot}"
  },
  "ignore": [
    "**/vendor/**/*.php"
    ]
  },

请求Cookie

"XDEBUG_SESSION" => "VSCODE"

Dockerfile

FROM php:fpm-alpine3.11
...
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
...

3 个答案:

答案 0 :(得分:3)

这也发生在我身上,发现XDEBUG不在寻找Docker Daemon主机。通过添加以下内容进行修复:

"hostname": "0.0.0.0"

作为VS Code上launch.json常规选项的一部分。

答案 1 :(得分:0)

我花了很多天来“扯头发”。

  1. 在防火墙中添加规则以允许流量(取自/引用自https://github.com/microsoft/WSL/issues/4171#issuecomment-559961027
    如果不够清晰,请去那里获取屏幕截图)
  1. 在Windows的“开始”菜单中,键入Firewall并选择Advanced settings,然后选择Inbound Rules
  2. 选择自定义规则。
  3. 单击“下一步”直到您进入左侧菜单中的Protocol and Ports
  4. 选择ICMPv4作为协议类型。
  5. 选择“下一步”,直到您进入Name部分,输入任何名称,然后单击“完成”。

如果您现在尝试从wsl2 ping您的主机IP,它应该可以 预期的。

对于wsl2和主机之间的所有其他连接,您都有 允许专用和公用网络的入站规则 不存在手动为相应的UDP / TCP创建规则 端口,但是请注意,如果使用 您的计算机在公共网络中。

  1. .vscode / 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": 9900,
            "pathMappings": {
                "/var/www/mywebdir.com":"${workspaceFolder}/MyWebDir",
            }
        },
    ]  
}
  1. Dockerfile
RUN echo "zend_extension=/usr/lib/php/20190902/xdebug.so\n \
         xdebug.remote_enable=on\n \
         xdebug.remote_autostart=on \n \
         xdebug.remote_connect_back=on\n \
#         xdebug.remote_host=$HOST_IP\n \
#         xdebug.remote_log_level=9\n \
#         xdebug.remote_log=/var/www/mywebdir.com/xdebug.log \n \
         xdebug.remote_port=9900" > /etc/php/7.4/mods-available/xdebug.ini;

编辑: 一段时间后,我又开始遇到问题了。试试这些:

  • 在dockerfile中取消注释上面的日志记录行

  • 尝试对您的Windows IP地址(例如192.168.0.x)进行硬编码

    (取消注释xdebug.remote_host = ...并注释掉xdebug.remote_autostart = on)

    我的xdebug似乎已连接,但之后立即关闭了连接,因为它必须是我的Windows ip。我的理解是,它的VSCode响应Windows中运行的xdebug请求,因此调试数据包需要通过WSL2。

  • 尝试10级日志记录。如果您发现xdebug找不到断点的匹配项,请在docker中检查您的Webroot映射,并在vscode / launch.json中检查pathMappings

  • 检查您是否设置了断点(愚蠢但可以)

答案 2 :(得分:0)

在一位同事帮助我配置 Xdebug 以从 VSCode 侦听 WSL Remote 环境之后,我查找了一个选项,当您单击 IDE 左下角的 WSL Remote 图标时会打开该选项:

远程 WSL:显示日志

它打开一个 WSL 终端,显示(在几个信息之间)WSL 正在使用的 IP 地址。将此 WSL IP 添加到 xdebug.remote_host 值,唯一让 Xdebug 从 Docker 容器、WSL2 环境(来自 WSL 远程 VSCode 扩展)中正确运行的唯一方法是在内部调整应用程序路径launch.json 文件。

为此,在launch.json文件选项卡上用鼠标右键单击,搜索并单击“复制路径”选项,然后将其粘贴到pathMappings设置中,就像这个示例(不要忘记调整路径,删除相对于 launch.json 本身的信息,它适用于您的应用程序路径!):

"pathMappings": {
      "/application": "paste here the path you've copied"
 }

试试吧,对我来说就像一个魅力。如果它也适用于您,请为我的答案投票!