5

我不确定问题是什么,它只是不起作用。

路由似乎有效,我的 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

启动.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
...
4

3 回答 3

8

这也发生在我身上,发现 XDEBUG 不是在寻找 Docker 守护进程主机。通过添加修复它:

"hostname": "0.0.0.0"

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

于 2020-05-29T19:24:34.003 回答
1

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

远程 WSL:显示日志

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

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

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

试试看,对我来说就像一个魅力。如果它也适合你,请投票给我的答案!

于 2020-12-30T20:31:49.557 回答
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
{
    “版本”:“0.2.0”,
    “配置”:[
        {
            "name": "监听 XDebug",
            “类型”:“php”,
            “请求”:“启动”,
            “端口”:9900,
            “路径映射”:{
                "/linux/path/in/docker":"${workspaceFolder}",
            }
        },
    ]  
}
  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。我的理解是,它是响应在 Windows 中运行的 xdebug 请求的 VSCode,因此调试数据包需要通过 WSL2。

  • 尝试记录级别 10。如果您看到 xdebug 找不到断点的匹配项,请检查您pathMappings在 docker 和 vscode/launch.json 中的 webroot 映射

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

于 2020-09-16T23:13:22.060 回答