php xDebug无法使用docker、vscode和WSL 2

68bkxrlz  于 2023-03-21  发布在  PHP
关注(0)|答案(3)|浏览(277)

我不知道是什么问题,它只是不工作。
路由似乎工作,我有一个服务器名称在我的nginx配置文件。e.g. 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"

停靠文件

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

7tofc5zh1#

这也发生在我身上,发现XDEBUG没有寻找Docker守护进程主机。通过添加以下内容修复了它:

"hostname": "0.0.0.0"

作为VS Code上launch.json的常规选项的一部分。
完整示例:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "XDebug",
            "type": "php",
            "request": "launch",
            "hostname": "0.0.0.0",
            "port": 9000,
            "pathMappings": {
                "/var/www/html/": "${workspaceFolder}"
            },
            "xdebugSettings": {
                "max_children": 999,
                "max_data": -1,
            }
        }
    ]
}
pbgvytdp

pbgvytdp2#

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

远程WSL:显示日志

它打开了一个WSL终端,它显示(在几个信息之间)* WSL正在使用的IP地址 *。将此WSL IP添加到 xdebug.remote_host 值中,要使Xdebug从Docker容器在WSL 2环境(从WSL Remote VSCode扩展)中正确运行,剩下的唯一事情就是在 launch.json 文件中调整应用程序路径。
为此,用鼠标右键单击launch.json文件选项卡,搜索并单击“复制路径”选项,然后将其粘贴到pathMappings设置中,就像这个示例一样(不要忘记调整路径,删除相对于launch.json本身的信息,这是您的应用程序路径!):

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

试试看,对我来说效果很好。如果对你也有效,请投票支持我的答案!

ioekq8ef

ioekq8ef3#

我已经花了很多天“撕裂我的头发”..我使用 Docker 。
1.在防火墙中添加规则以允许流量(取自/引用自:https://github.com/microsoft/WSL/issues/4171#issuecomment-559961027
去那里截图,如果这是不够清楚)
1.在Windows开始菜单中,键入Firewall并选择Advanced settings,然后选择Inbound Rules
1.选择自定义规则。
1.单击Next,直到在左侧菜单中找到Protocol and Ports
1.选择ICMPv 4作为协议类型。
1.选择Next,直到进入Name部分,输入任意名称并单击Finish。
如果您现在尝试从wsl 2 ping主机ip,它应该可以正常工作。
对于wsl 2和主机之间的每一个其他连接,您必须允许私有和公共网络的入站规则,或者如果它们不存在,则手动创建相应UDP/TCP端口的规则,但要注意,如果您在公共网络中使用计算机,这可能会影响您的安全性。

  1. .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9900,
            "pathMappings": {
                "/linux/path/in/docker":"${workspaceFolder}",
            }
        },
    ]  
}

1.停靠文件

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请求,所以调试包需要通过WSL 2。

  • 尝试记录级别10。如果您看到xdebug无法找到断点的匹配,请检查docker中的webrootMap和vscode/launch.json中的pathMappings
  • 检查你是否设置了断点(很傻,但是是的)

相关问题