必须先运行php --ini和php -v确认CLI加载的php.ini路径及Xdebug是否启用,否则后续所有配置均无效;90%的断点不触发、变量undefined、空心圆等问题源于此。
和
必须先跑一遍,否则所有后续配置都是空中楼阁。断点不触发、变量显示
、断点图标变空心圆——90% 是 CLI 加载的
路径错了,或 Xdebug 根本没启用。
确认 PHP CLI 实际加载的
php
.ini 路径
VSCode 调试走的是 PHP 命令行(CLI)环境,和 Apache/Nginx 的配置完全无关。很多人改了
,但
用的是
,结果白配。
终端执行
,盯住
那一行路径
再执行
,输出里必须含
字样;没有就说明这个
没启用 Xdebug
Windows 用户:WAMP/XAMPP 默认有两套
,CLI 用的是 PHP 安装目录下的那个
macOS/Linux 用户:Homebrew 安装的 PHP,路径通常是
,别去碰
改完
后,必须重启 VSCode 终端(或整个 VSCode),否则
看不到变化
区分 Xdebug 2 和 Xdebug 3 的配置项
在 Xdebug 3 中已彻底废弃,写进去不仅无效,还可能让 PHP 启动失败或静默忽略。混用是调试连接静默失败的头号原因。
先用
确认版本:
→ 用新参数;
→ 升级为佳
Xdebug 3 必须写:
(不是
或
),
(默认不是 9000)
Xdebug 2 必须写:
,
两者都需
(Linux/macOS)或
(Windows)
别在 Xdebug 3 配置里留
这类字段,它会直接导致调试连接失败
pathMappings 映射必须严格匹配服务器路径与本地路径
这是断点不生效的最高频原因。Xdebug 发送的是服务器上 PHP 脚本的绝对路径(比如
),VSCode 必须知道它对应你本地哪个文件夹。漏写、写反、斜杠方向错,都会让断点变成空心圆。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
映射格式必须是 POSIX 风格:用正斜杠
,不是反斜杠
Docker 场景:容器内路径是
,本地项目在
,那就写
WSL 场景:Windows 本地路径是
,WSL 内路径是
,映射左侧就得填
纯本地开发(如 MAMP):Apache DocumentRoot 是
,那左侧就填这个,右侧填
Windows 用户尤其注意:不能写
,得转成
或
(取决于 WSL 版本)
launch.json 的 port 必须和 xdebug.client_port 严格一致
VSCode 的
不是模板填充游戏,
字段必须和
里的
一模一样,差一个数字都不行。
立即学习
“
PHP免费学习笔记(深入)
”;
Xdebug 3 默认是
,不是旧版的
;很多教程照抄旧值,直接导致“连接超时”
launch.json 示例片段(Xdebug 3):
如果用了 Docker Desktop 或 macOS Monterey+,
可能得改成宿主机网关(如
),而不是
强烈建议在
中加一行
(Linux/macOS)或
(Windows),出问题直接查日志,比猜快得多
和
路径错配,是两个最隐蔽也最常被忽略的点。前者错,断点不命中但无报错;后者错,Xdebug 根本不加载,连日志都不会写。
php --iniphp -vundefinedphp.iniC:\xampp\apache\bin\php.iniphp -vC:\xampp\php\php.iniphp --iniLoaded Configuration Filephp -vwith Xdebugphp.iniphp.ini/usr/local/etc/php/X.Y/php.ini/etc/php.iniphp.iniphp -vxdebug.remote_enable=1php -v | grep xdebugXdebug v3.xXdebug v2.9xdebug.mode=debugon1xdebug.client_port=9003xdebug.remote_enable=1xdebug.remote_port=9000zend_extension=xdebug.sozend_extension=php_xdebug.dllxdebug.remote_host/var/www/html/index.php/\/app/${workspaceFolder}"pathMappings": { "/app/": "${workspaceFolder}/" }C:\Users\me\project/mnt/c/Users/me/project/mnt/c/Users/me/project//Applications/MAMP/htdocs${workspaceFolder}C:\project/c/project/mnt/c/projectlaunch.jsonportphp.inixdebug.client_port90039000{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/": "${workspaceFolder}/"
}
}
]
}xdebug.client_host10.0.2.2127.0.0.1php.inixdebug.log=/tmp/xdebug.logxdebug.log=C:\xdebug.logpathMappingsphp.ini