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=trigger
和xdebug.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 - 有效的配置的主要内容,如果未能解决你的问题,请参考以下文章