Xdebug 3.0 WSL2 和 VSCode - 有效的配置

Posted

技术标签:

【中文标题】Xdebug 3.0 WSL2 和 VSCode - 有效的配置【英文标题】:Xdebug 3.0 WSL2 and VSCode - Configuration That Works 【发布时间】:2021-05-17 07:32:44 【问题描述】:

Web 上大多数使用 VSCode 和 WSL 进行 php 调试的示例都使用 Xdebug 2.x php.ini 设置。这些不再适用于 3.0 版。有关更改的详细信息,请参阅Xdebug Upgrade。

以下内容适用于我的一个 PHP 项目,其中包含一个文件,只是为了测试调试。使用 Ubuntu 20.04、WSL2、Xdebug 3.02 以及 Felix Becker 的 VSCode 扩展 Remote WSL 和 PHP Debug。

我必须在我的系统上同时修改 /etc/php/7.3/apache2/php.ini/etc/php/7.3/cli/php.ini。希望这对你们有用。

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 = 9003 

launch.json

"configurations": [
        
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "stopOnEntry": true,
            "log": true,
            "pathMappings": 
            
                "/var/www/html/test": "$workspaceRoot"             
            
        ,
        
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "$file",
            "cwd": "$fileDirname",
            "port": 9003
        
    ]  

【问题讨论】:

【参考方案1】:

补充@Jim D 记录的内容:

我最初使用其 Windows 网络共享路径 \\wsl$\Ubuntu-18.04\srv\www\myphpwebsite 打开了我的 VSCode WSL2 工作区。 Xdebug在这个配置下工作——大概是因为端口 9003 没有从 Windows 转发到 WSL2。

我必须使用Remote - WSL extension重新打开工作区/文件夹。为此,您可以单击 VSCode 状态栏(左下角)上的 Remote-WSL 控件,然后选择“在 WSL 中重新打开文件夹”。将 Remote-WSL“安装”到 WSL2 大约需要 10 分钟。

此后,我不得不专门在 WSL:Ubuntu WSL2 环境中“安装”(或启用)PHP Debug extension,即使它已经安装在 VSCode 中。

我的launch.json 配置是:

        
            "name": "myphpwebsite",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": 
                "/srv/www/myphpwebsite": "$workspaceRoot" 
            ,
            //"stopOnEntry": true,
            //"log": true,
            "xdebugSettings": 
                "max_data": 10000,
                //"show_hidden": 1,
                "max_children": 250,
                "max_depth": 10
            
        ,

我的 PHP 配置(针对 PHP 7.3)如下:在/etc/php/7.3/apache2/conf.d 文件夹中,20-xdebug.ini 文件是指向/etc/php/7.3/mods-available/xdebug.ini 的符号链接。这是通过sudo apt install php7.3-xdebug 自动配置的。它只包含:

zend_extension=xdebug.so

然后我在/etc/php/7.3/apache2/conf.d 文件夹中添加了一个补充99-xdebug.ini 文件(以确保它在20-xdebug.ini 文件之后加载,并使其配置与发行版分开)。该文件包含:

xdebug.mode=debug
xdebug.start_with_request=trigger
;xdebug.start_with_request=yes
xdebug.discover_client_host=1
;xdebug.log=/tmp/xdebug/xdebug.log
xdebug.output_dir=/tmp/xdebug/
xdebug.client_port=9003
xdebug.var_display_max_depth=10
xdebug.var_display_max_children=250
xdebug.var_display_max_data=10000

在进行.ini 更改后不要忘记重新启动 Apache。

使用xdebug.start_with_request=trigger 设置,在VSCode 中启动调试器后,我使用Chrome Xdebug helper extension 触发XDebug 会话。 (如果使用 .ini 设置 xdebug.start_with_request=yes 代替,则不需要 Xdebug helper 扩展,因为 Xdebug 将尝试连接端口 9003 上的调试器 every 对 PHP 的 Web 请求。)

最后,我注释掉了xdebug.log=/tmp/xdebug/xdebug.log 设置,因为这会产生非常大的详细日志。 (但它在最初诊断正在发生的事情时很有用。)

更新

要将xdebug.start_with_request=triggerxdebug.trigger_value=VSCODE 与VSCode 的“启动当前打开的脚本”调试配置一起使用,我必须在"env""env" 部分中设置正确的环境变量@:

        
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "$file",
            "cwd": "$fileDirname",
            "port": 9003,
            "pathMappings": 
                "/srv/www/myphpwebsite": "$workspaceRoot" 
            ,
            //"stopOnEntry": true,
            //"log": true,
            "env": 
                "XDEBUG_MODE": "debug",
                "XDEBUG_TRIGGER": "VSCODE"
            
        ,

Xdebugging 祝你好运!

【讨论】:

以上是关于Xdebug 3.0 WSL2 和 VSCode - 有效的配置的主要内容,如果未能解决你的问题,请参考以下文章

带有 WSL2 的 VSCode - 由于对 ping 没有响应而延迟启动

vscode使用xdebug断点调试php代码

VSCode Xdebug断点调试PHP

WSL2_07 VSCode配置并编写Python程序

Xdebug V3 不会停止 VSCode 中的断点

VScode 无法将文件保存在我的 WSL2 主文件夹中