Xdebug 3.0 WSL2 和 VSCode - 有效的配置

Jim*_*m D 4 xdebug visual-studio-code vscode-remote

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

以下内容对我来说适用于一个带有单个文件的 PHP 项目,只是为了测试调试。使用 Ubuntu 20.04、WSL2、Xdebug 3.02 以及 Felix Becker 的 VSCode 扩展远程 WSL 和 PHP 调试。

我必须在我的系统上修改/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 
Run Code Online (Sandbox Code Playgroud)

启动.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
        }
    ]  
Run Code Online (Sandbox Code Playgroud)

Mar*_*ATS 8

补充@Jim D记录的内容:

\n

我最初使用其 Windows 网络共享路径打开 VSCode WSL2 工作区\\\\wsl$\\Ubuntu-18.04\\srv\\www\\myphpwebsiteXdebug无法使用此配置\xe2\x80\x94,可能是因为端口 9003 未从 Windows 转发到 WSL2。

\n

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

\n

远程 WSL 控制

\n

此后,我必须专门在WSL:Ubuntu WSL2 环境中“安装”(或启用) PHP 调试扩展,即使它已经安装在 VSCode 中。

\n

WSL2 中启用 PHP 调试扩展

\n

我的launch.json配置是:

\n
        {\n            "name": "myphpwebsite",\n            "type": "php",\n            "request": "launch",\n            "port": 9003,\n            "pathMappings": {\n                "/srv/www/myphpwebsite": "${workspaceRoot}" \n            },\n            //"stopOnEntry": true,\n            //"log": true,\n            "xdebugSettings": {\n                "max_data": 10000,\n                //"show_hidden": 1,\n                "max_children": 250,\n                "max_depth": 10\n            }\n        },\n
Run Code Online (Sandbox Code Playgroud)\n

我的 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。它仅包含:

\n
zend_extension=xdebug.so\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
xdebug.mode=debug\nxdebug.start_with_request=trigger\n;xdebug.start_with_request=yes\nxdebug.discover_client_host=1\n;xdebug.log=/tmp/xdebug/xdebug.log\nxdebug.output_dir=/tmp/xdebug/\nxdebug.client_port=9003\nxdebug.var_display_max_depth=10\nxdebug.var_display_max_children=250\nxdebug.var_display_max_data=10000\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

通过xdebug.start_with_request=trigger设置,在 VSCode 中启动调试器后,我使用 Chrome Xdebug 帮助程序扩展来触发 XDebug 会话。(如果使用该.ini设置,则不需要Xdebug 帮助程序扩展,因为 Xdebug 将尝试在每个对PHP 的 Web 请求中与端口 9003 上的调试器连接。)xdebug.start_with_request=yes

\n

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

\n

更新

\n

要使用xdebug.start_with_request=triggerVSCodexdebug.trigger_value=VSCODE的“启动当前打开的脚本”调试配置,我必须在以下"env"部分中设置正确的环境变量launch.json

\n
zend_extension=xdebug.so\n
Run Code Online (Sandbox Code Playgroud)\n

祝 X 调试好运!

\n