笔者最近有调试php代码的需求(由于技术太差静态分析看不出来x),网上安利Xdebug调试php,于是手痒也想配置一个。结果由于博客大多针对老版本Xdebug(大多是2),而新版本端口和配置改了许多,没法直接使用。后面看着文档和phpinfo手搓出一个配置,算是解决了。于是把踩坑过程记录下来,与读者分享。
介绍
Xdebug,是一个PHP插件,可用于单步调试/输出调试等,配合VS Code的插件,功能十分强大,可满足日常大多数环境需求。
插件功能包括:
- 远程监听调试
- 本地单文件调试
- 本地浏览器调试
一般前两个功能使用较多,小脚本使用第二个功能,网站类代码推荐监听调试。
本教程基于Xdebug3,phpstudy
中自带版本不匹配插件,建议不使用那个库
下载安装
Xdebug: Support — Tailored Installation Instructions
按照指引,将网站phpinfo
完整复制到Wizard中。网站会为你推荐指定PHP版本、系统环境的Xdebug库。笔者是Windows系统,得到一个DLL文件。将其放入Wizard指示的目录中。
监听输出配置
在php.ini
中增加配置项
[XDebug]
; dll 文件名,如果没有放在指定ext目录中,需要配置完整路径
zend_extension=php_xdebug-3.1.5-7.3-vc15-nts-x86_64.dll;
; 必须开启
xdebug.remote_enable = 1;
xdebug.remote_autostart = 1;
xdebug.remote_handler=dbgp;
; xdebug 寻找的监听地址,Xdebug3 改名,原名称为 remote_host
xdebug.client_host="127.0.0.1";
; xdebug 需要寻找的监听端口
xdebug.client_port=9001;
; for debug
xdebug.collect_vars = On;
; for debug
xdebug.collect_return = On;
; for debug
xdebug.collect_params = On;
; debug mode select
xdebug.mode = debug;
; 本机调试必须开启,Xdebug3新增设置
xdebug.discover_client_host = On;
Attention: 此配置文件基于Xdebug3,与老版本不适配,许多配置项为新增配置,另一些经过改名
配置完成后,去phpinfo
下查看插件状态,如果发生问题,也去该处 debug
如果较多在浏览器上debug,建议安装Xdebug Helper
插件,方便切换调试模式
VS Code 插件配置
安装插件PHP Debug
.
需要在VS Code全局设置中,增加两个配置,以开启本地单文件调试功能
{
"php.debug.executablePath": "YOUR_PHP_PATH\\php.exe",
"php.validate.executablePath": "YOUR_PHP_PATH\\php.exe"
}
可在 Settings -> PHP Debug: Executable Path中转到该设置项。
随后添加调试配置(必做)
在打开一个PHP文件的条件下,在调试栏选择 Edit in Launch.json
。自动添加三个选项,如下所示(也可以另外手动添加三个(添加配置))
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9001
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 0,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=${port}"
}
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"localhost:9001"
],
"program": "",
"cwd": "${workspaceRoot}",
"port": 9001,
"serverReadyAction": {
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
}
}
]
}
- Attention: Listen for Xdebug项的 port 属性,需要与
php.ini
配置文件中相同,一般这个需要手动修改,其余基本不需要修改
启动调试
在PHP文件处下断点,选择Listen for Xdebug,F5开始调试(进入监听状态)
浏览器访问对应文件,VS Code成功捕获断点