使用xdebug:
下载
或在这里输入PHP的信息给出推荐的版本:Xdebug: Support — Tailored Installation Instructions
配置:
打开php.ini文件,在文件最后添加:(3.0的配置项有些改了)
[XDebug]
zend_extension = php_xdebug-3.0.2-7.4-vc15-nts-x86_64.dll
xdebug.output_dir="D:\Work\php\xdebug\output"
xdebug.start_with_request = trigger
xdebug.client_port = 9003
xdebug.mode = debug,coverage
php_xdebug-3.0.2-7.4-vc15-nts-x86_64.dll文件放在php的ext目录下可以使用相对路径。
这里使用的端口号是默认的9003,如需改添加端口配置项:
xdebug.client_port = 9100(指的是调试工具的端口,XDebug将会往这个端口中发送调试消息。如:vscode的PHP Debug)
xdebug.start_with_request 指定xdebug的启动方式,可选值:
- yes 任何请求都启动。(这种方式对所有访问都会启动调试,浏览器直接访问的情况下会报:Xdebug: [Step Debug] Time-out connecting to debugging client。想要正常访问必须先启动调试工具,如:vscode的PHP Debug。)
PHP启动后,只要有PHP运行都往客户端的端口发调试消息。建议使用trigger方式。 - trigger 请求中有参数(XDEBUG_SESSION)才启动,可以是get/post请求:http://a.com/?XDEBUG_SESSION=abc。参数值可以任意,除非设置了xdebug.trigger_value。参考:Xdebug 3.0 WSL2 和 VSCode - 有效的配置答案 - 爱码网
用浏览器可以用这种方式启动监听,带了参数的请求才往客户端的端口发送调试消息。仅个别代码需要调试时建议使用这种。
参考:Xdebug: Documentation » Step Debugging
安装好vscode后,安装扩展:
添加配置:
注意:port = xdebug的默认端口是9003,如果需要改端口号,要与xdebug的配置相同(xdebug的端口号配置项:xdebug.client_port = 9100) 没有运行选项的,要先创建launch.json文件
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
//新版的xdebug3的默认端口是9003
"port": 9003
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9003
}
调试
调试方式有两种,脚本和web方式。
脚本方式:运行方式选择Launch currently open script
在要调试的文件中打上断点,按F5启动调试(或 运行->启动调试),进入调试状态。
web方式:选择运行方式:Listen for XDebug
进入代码文件所在目录,启动PHP的内置web服务器,运行命令:(端口号可以自定义,不影响调试)
php -S localhost:8001
启动调试:(这时vscode还没有捕获断点)
打开浏览器,访问:http://localhost:8001/a.php
浏览器一直在转等输出,vscode进入调试状态。
参考:
vscode使用xdebug3调试PHP脚本_raoxiaoya的博客-CSDN博客
多版本配置
如果开发环境中有多个PHP版本,需要指定特定版本运行调试,则需要配置:
CLI方式调试
- vscode 启动调试:Listen for Xdebug
- 命令行运行命令:
php -dxdebug.start_with_request=yes -dxdebug.client_port=9004 think test
-dxdebug.client_port=9004 是xdebug客户端的端口(即vscode的调试器端口)