我的PHP代码放在wsl的linux格式文件夹中,在windows的文件夹中会有很大的性能损耗。
开发工具使用的vs code。
PHP设置
1. 安装PHP的 xdebug 扩展。
2. 配置 xdebug:
在PHP的 ini 配置文件中添加如下设置:
xdebug.mode=debug
# xdebug与开发工具通信的地址和端口号,这里是 xdebug3 版本的设置
# xdebug2 版本对应的是 xdebug.remote_host 和 xdebug.remote_port
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.discover_client_host=true
可能得问题:client_host 设置的值“host.docker.internal”正常可以获取到 Docker 所在环境的 ip 地址,如果在测试时 VS Code 没有正常调起调试,可以进入 wsl 中,执行“ip a”查看 wsl 的 ip 地址,例如我的 wsl 地址如下:
然后将 xdebug.client_host 的地址改为 wsl 的 IP,我的 IP 是 172.23.250.175,所以 xdebug 设置 xdebug.client_host=172.23.250.175。
VS Code设置
说明:VS Code 开发 wsl 中的 PHP 项目时,需要 VS Code 先连接到 wsl,打开在项目代码后,VS Code 会提示安装 PHP 相关的插件,这些插件会被安装到 wsl 中,而不是 windows 中。
1. 在 VS Code 的扩展插件中找到 PHP Xdebug 插件并安装。
2. 添加调试配置。
点击创建 launch.json 文件,选择 PHP。VS Code 会在项目根目录的 .vscode 文件夹下生成 launch.json 文件。
3. 编辑 launch.json 文件。
在 configurations 中添加调试监听。
其中“pathMappings”字段用来设置项目在 Docker 容器中的目录。
例如我的项目在 wsl 中的目录是“/home/mycodes/www/test”,在 Docker 容器的路径是“/www/test”,那么这里的设置就是“"/www/test": "${workspaceRoot}"”
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "监听访问",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"项目根目录在Docker中的路径": "${workspaceRoot}"#此处为本地文件映射到docker中的路径
}
}
]
}
开始调试
PHP xdebug 和 VS Code 都设置完成后,就可以开始调试。
1. 打开你的项目文件,设置断点。
2. 开启调试监听。
可以通过 F5 开启,或者在 VS Code 的运行运行与调试中开启:
查看开发工具是否出现调试操作的按键:
3. 访问项目。
可以使用浏览器打开项目网页,或者 API 请求工具发送请求,在 PHP 收到访问请求后,会与 VS Code 进行通信,代码调试开启中:
如果调试监听失败,参考 PHP设置 中 xdebug.client_host 设置的说明,修改为 wsl 的固定 IP 地址。
Swoole调试
从 Swoole 5.1 版本开始可直接使用 xdebug 扩展来调试 Swoole 程序
1. 配置 Swoole 调试
在PHP的 ini 配置文件中添加如下设置:
swoole.enable_fiber_mock=On
2. 开始调试
调试时需注意以下两点:
(1) 需要在运行 Swoole 服务之前开启 xdebug 监听。
(2) 启动 Swoole 服务后添加的断点将不会监听,需要重启 Swoole 服务。