网络上使用 VSCode 和 WSL 进行 PHP 调试的大多数示例都使用 Xdebug 2.x php.ini 设置。这些不再适用于 3.0 版本。有关更改的详细信息,请参阅Xdebug Upgrade。
以下内容对我来说在一个带有单个文件的 PHP 项目中工作,只是为了测试调试。使用 Ubuntu 20.04、WSL2、Xdebug 3.02 以及 VSCode 扩展远程 WSL 和 PHP 调试,作者:Felix Becker。
我必须修改我系统上的
/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
启动.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
}
]
补充@Jim D记录的内容:
我最初使用其 Windows 网络共享路径打开 VSCode WSL2 工作区
\\wsl$\Ubuntu-18.04\srv\www\myphpwebsite
。 Xdebug 不能 使用此配置 - 可能是因为端口 9003 未从 Windows 转发到 WSL2。
我必须使用远程 - WSL 扩展重新打开工作区/文件夹。为此,您可以单击 VSCode 状态栏(左下角)上的 Remote-WSL 控件,然后选择“在 WSL 中重新打开文件夹”。将 Remote-WSL“安装”到 WSL2 中大约需要 10 分钟。
此后,我必须专门在 WSL:Ubuntu WSL2 环境中“安装”(或启用)PHP 调试扩展,即使它已经安装在 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
然后我将补充的
99-xdebug.ini
文件添加到 /etc/php/7.3/apache2/conf.d
文件夹中(以确保它在 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 帮助程序扩展 来触发 XDebug 会话。 (如果使用 .ini
设置 xdebug.start_with_request=yes
,则不需要 Xdebug helper 扩展,因为 Xdebug 将尝试通过对 PHP 的 every Web 请求与端口 9003 上的调试器连接。)
最后,我注释掉了
xdebug.log=/tmp/xdebug/xdebug.log
设置,因为这会产生非常大的详细日志。 (但它对于最初诊断正在发生的情况很有用。)
要将
xdebug.start_with_request=trigger
和 xdebug.trigger_value=VSCODE
与 VSCode 的“启动当前打开的脚本”调试配置一起使用,我必须在 "env"
中的 launch.json
部分设置正确的环境变量:
{
"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"
}
},
祝 X 调试好运!
更新 PHP 8.1。需要更改 xdebug.so 文件的完整路径。 zend_extension = ...您的路径可能会有所不同,具体取决于您的系统。不同的是“20210902”。
[xdebug]
zend_extension = /usr/lib/php/20210902/xdebug.so
....
....
步骤 安装 WSL 2 和 Ubuntu 22.04
wsl --install
打开 Ubuntu 终端并安装调试
sudo apt install -y php-xdebug
编辑 xdebug.ini 并添加行
vim /etc/php/8.1/cli/conf.d/20-xdebug.ini
zend_extension = xdebug.so
xdebug.mode = develop,debug
xdebug.discover_client_host = 1
创建项目文件夹:
mkdir ~/演示 cd ~/演示
在 VS 代码中 像这样安装 WSL 扩展:
按 F1,按 Backspace,粘贴以下命令并按 Enter:
ext install ms-vscode-remote.remote-wsl
像这样安装 PHP 调试扩展:
按 F1,按 Backspace,粘贴以下命令并按 Enter:
ext install xdebug.php-debug
在 WSL 中打开项目文件夹,如下所示:
按F1,输入WSL:连接到WSL并按Enter 选择文件夹演示 使用以下内容创建文件 ~/demo/.vscode/launch.json:
{
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch"
}
]
}
打开文件index.php
在第二行设置断点
按F5开始调试
在您的网络浏览器中 安装“Xdebug helper”扩展
转到http://localhost:8080/
单击扩展程序的图标并启用它
重新加载页面
现在应该命中断点。