
xdebug 3.1.1 存在已知缺陷,导致在“step over/into”操作时向 php 进程发送意外终止信号(stopping reason="ok"),升级至 3.1.2 或更高版本即可修复。
xdebug 3.1.1 存在已知缺陷,导致在“step over/into”操作时向 php 进程发送意外终止信号(stopping reason="ok"),升级至 3.1.2 或更高版本即可修复。
在使用 Xdebug 3.0+ 进行远程调试时,部分开发者会遇到一种典型故障:脚本在禁用调试器时运行正常,但一旦启用并命中断点,执行「Step Over」或「Step Into」后,调试会话立即中断,PHP 进程非预期退出,Xdebug 日志中出现如下关键记录:
[22776] [Step Debug] <- step_over -i 282 [22776] [Step Debug] -> <response ... command="step_over" ... status="stopping" reason="ok"></response> [22776] [Step Debug] <- run -i 283 [22776] Log closed at 2022-03-22 11:46:15.011006
该 status="stopping" reason="ok" 并非用户主动终止,而是 Xdebug 内部状态机异常触发的强制退出,根源在于 Xdebug 3.1.1 版本中存在的若干调试协议处理缺陷——特别是在多步调试指令衔接、上下文切换及信号同步环节存在竞态与状态重置错误。
✅ 根本解决方案:升级 Xdebug
官方已在后续补丁版本中修复此问题:
- ✅ Xdebug 3.1.2(2022年3月发布):修复了 step_over/step_into 后错误进入 stopping 状态的问题(Issue #2190)
- ✅ Xdebug 3.1.3(2022年4月发布):进一步加固调试器稳定性,推荐直接升级至此版本(当前最新稳定版)
? 升级操作步骤:
- 访问 Xdebug 官方下载页,选择匹配你 PHP 版本(如 PHP 7.3 TS/NTS)、架构(x86_64)和编译器(VC15)的 .dll 文件(例如:php_xdebug-3.1.3-7.3-vc15-x86_64.dll);
- 替换原 php.ini 中 zend_extension 指向的旧 DLL 文件;
- 更新 php.ini 配置(注意:Xdebug 3+ 已弃用 xdebug.remote_* 系列旧参数,应改用新命名):
[xdebug] zend_extension = "c:/wamp64new/bin/php/php7.3.33/zend_ext/php_xdebug-3.1.3-7.3-vc15-x86_64.dll" xdebug.mode = debug xdebug.start_with_request = trigger ; 或设为 yes(自动启动),按需调整 xdebug.client_host = "localhost" xdebug.client_port = 9003 ; Xdebug 3 默认端口为 9003(非 9000) xdebug.log = "c:/wamp64new/logs/xdebug.log" xdebug.log_level = 7 xdebug.output_dir = "c:/wamp64new/tmp"
⚠️ 重要注意事项:
- 删除所有已废弃的 xdebug.remote_enable、xdebug.remote_host 等配置项,它们在 Xdebug 3 中已被忽略,残留可能引发隐式行为冲突;
- 确保 IDE(如 PHPStorm、VS Code)调试监听端口与 xdebug.client_port 一致(默认 9003);
- 升级后务必重启 Web 服务器(Apache/Nginx)及 PHP-FPM(如适用),使新扩展生效;
- 可通过 php -v 或 phpinfo() 验证 Xdebug 版本是否已更新成功。
? 补充建议:若升级后仍偶发中断,可临时启用更细粒度日志辅助诊断:
xdebug.log_level = 10 ; 启用全量日志(仅调试期使用,避免性能损耗)
总结:该问题并非环境配置错误,而是 Xdebug 3.1.1 的已知软件缺陷。升级至 3.1.2+ 是唯一可靠、无需变通的解决路径。保持调试工具版本更新,既是提升开发效率的关键,也是规避底层协议兼容性风险的最佳实践。










