You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code使用Xdebug调试PHP时出现`error evaluating code`报错如何解决?

问题原因分析
  • 版本兼容性问题:当前使用的Xdebug 3.1.1、旧版VS Code及对应PHP Debug扩展存在兼容缺陷,调试扩展无法正确解析Xdebug返回的执行错误详情,只会抛出通用的error evaluating code报错。
  • 断点未生效:你提供的Xdebug日志中,两个断点返回的状态均为unresolved,说明Xdebug无法匹配到你本地设置断点的文件路径,断点实际未命中,此时调试控制台的执行上下文为空,执行任何语句都会触发报错。路径不匹配通常是软链、大小写不一致、未配置远程路径映射导致的。
  • 评估上下文限制:Xdebug的调试评估接口默认不会返回执行过程中触发的PHP警告、错误信息,也无法正确处理带输出的语句(如echo),执行这类语句时会直接返回通用错误。
解决方案

1. 修复版本兼容问题

  • 升级VS Code到1.70以上版本,同时将VS Code的PHP Debug扩展升级到最新适配Xdebug 3.x的版本,从底层修复错误信息解析缺陷。
  • 若暂时无法升级版本,可在php.ini的Xdebug配置段新增配置xdebug.evaluate_return=1,重启PHP服务后强制Xdebug返回评估语句的完整执行结果和错误信息。

2. 配置正确的路径映射

打开项目下的.vscode/launch.json文件,在Xdebug监听配置中添加pathMappings字段,将服务器端代码路径和本地打开的项目路径做映射,示例配置如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/home/myname/path/": "${workspaceFolder}"
      }
    }
  ]
}

配置完成后重启调试,查看Xdebug日志中breakpoint_set的返回结果,当状态变为resolved="resolved"说明断点已生效,此时再在调试控制台执行语句即可正常获取返回结果。

3. 调试控制台使用规范

  • 不要直接在调试控制台执行带输出的语句(如echo、var_dump),如果需要测试字符串值,可改为赋值给临时变量查看,例如执行$test_str = "str";后直接查看$test_str的值即可。
  • 若需要测试mkdir这类可能触发错误的函数,执行完成后可紧接着执行error_get_last()即可获取到具体的错误信息(如权限拒绝的详细提示)。
  • 注意PHP中mkdir的权限参数需要写八进制格式,也就是0711而非711,否则会被解析为十进制的711,对应实际权限和预期不符,也可能触发权限拒绝错误。

4. 临时规避方案

如果上述配置修改后仍有问题,可以直接将需要测试的语句写入到源码的断点位置,例如:

$mkdir_res = mkdir($dir_path, 0711, true);
$mkdir_error = error_get_last();

触发断点后直接查看$mkdir_res和$mkdir_error两个变量的值即可,不需要在调试控制台执行语句,不会触发评估错误。

内容的提问来源于stack exchange,提问作者LololoTheGreat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:45:01