Windows环境VSCode使用Xdebug调试无法单步跳过/进入问题求助
以下内容可用于问题排查参考:
我使用的开发环境如下:
- Windows 10(内部版本号19043.1288)
- VSCode v1.61.2,搭载PHP debug v1.21.1插件
- Firefox、谷歌Chrome两款浏览器
- XAMPP v3.3.0
- Xdebug v3.1.1-7.4x86_64
- 后台同时运行Ubiquiti网络控制器与BitDefender杀毒软件
[Xdebug] zend_extension = xdebug ;zend_extension = "c:\xampp\php\ext\php_xdebug-3.1.1-7.4-vc15-x86_64.dll" xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.mode = debug xdebug.start_with_request = yes xdebug.client_port = 9000 xdebug.log = "c:\xampp\htdocs\j4\tmp\xdebug.log"
此前VSCode+XAMPP+Xdebug搭配调试Joomla 3项目已稳定运行1年以上,离开两周返回后,无法单步进入任何Joomla 3的模块/类代码:VSCode可在断点处停下,但点击单步跳过、单步进入都会直接跳转至上层调用函数。
原本认为是Windows更新导致异常,索性升级到Joomla 4同时更新全链路开发环境,但问题依旧:代码可在第一个断点处停下,无法单步操作、也不会触发后续断点,仅J4核心模块可正常单步,调用栈显示正常,已初始化变量可正常查看。
已尝试所有可行方案:全新安装了原版无修改的XAMPP、Joomla4以及Xdebug官方向导推荐的Xdebug版本,临时关闭了BitDefender杀毒软件,设备位于网络防火墙后,未开启本地防火墙。
也完成了深度病毒扫描与磁盘检测,未发现异常。
全新安装环境前可正常生成Xdebug日志,全新安装后无法生成,同时断点无法重置:删除所有断点后下次运行断点自动恢复,必须在VSCode中停止并重启PHP调试才可清除断点。
怀疑是近期Windows更新修改了开发环境配置,也有可能是多次调整配置后疏漏了某个设置,目前已无排查思路。
恳请各位给出排查建议,若该问题无法复现,也请帮忙指出可能的系统故障点,十分感谢。
发现php/ext目录下意外混入了Xdebug v2版本文件,这就是日志无法生成的原因,目前已正确安装Xdebug 3.1.1版本,日志可正常生成,但单步调试问题依旧存在。
已获取到VSCode调试控制台与xdebug.log的日志文件,日志中存在大量和废弃函数相关的错误,按常理这类问题应抛出警告而非错误,同时存在大量“error evaluating code”报错。
已用特殊标记标注了日志中代码停止的位置,该标记出现在断点触发前短时间内(对应调试控制台日志431行、651行),不确定该现象是否正常。
安装了最新版搭载PDT插件的Eclipse IDE,使用完全相同的XAMPP/htdocs目录调试,Xdebug运行完全正常,无单步调试问题。
这说明Windows、XAMPP、Xdebug、Joomla都不是故障诱因,问题出在VSCode或本地的VSCode配置上。
问题根源是之前添加到监视窗口的几个变量(例如$this->missingclasses):大概率是几次VSCode更新后,这些变量对应的持久化内部对象出现损坏,删除这些异常监视变量后,单步调试立即恢复正常。
确认解决后重新添加了这些监视变量,单步调试依旧正常运行,将相同变量添加到Eclipse监视窗口不会影响单步调试。
为稳妥起见也卸载重装了PHP Debug插件,但可确定无法正常求值的监视变量才是故障根本原因。
后续会再观察几天,之后整理完整解决方案关闭该问题。
内容的提问来源于stack exchange,提问作者pjl55

