用 Xdebug + VS Code 断点调试 PHP,告别 var_dump

简介: 告别`var_dump`!本文手把手教你用Xdebug+VS Code实现PHP断点调试:一键启用扩展、统一端口配置、实时查看变量、单步执行,5分钟搞定高效调试,彻底提升开发体验。(239字)

用 Xdebug + VS Code 断点调试 PHP,告别 var_dump

「这段代码走到这了吗?」「这个变量现在到底是什么值?」

排查这类问题,很多人的第一反应是在代码里插入 var_dump($xxx); die;。一次两次还好,多了就变成噩梦:改完代码要刷新、看完要删、删漏了还会把调试信息带到线上。

断点调试能彻底改变这种体验:代码停在你想停的位置,变量值实时可看,还能一步步往下走。这篇文章手把手教你在 VS Code 里给 PHP 配上 Xdebug。

一、断点调试到底能干什么

在编辑器里点一下行号,这行代码就变成了「断点」。程序运行到这一行时停下来,你可以:

  • 查看当前所有变量的值;
  • 单步执行,一行一行看逻辑怎么走;
  • 随时改查调用栈,知道是从哪调进来的;
  • 不污染代码,调试完删掉断点就行。

对排查复杂 bug 来说,效率远超 var_dump

二、Xdebug 是怎么工作的

Xdebug 是 PHP 的调试扩展。原理很简单:

  1. PHP 进程加载 xdebug 扩展;
  2. 运行时按配置连接调试客户端(这里是 VS Code);
  3. 遇到断点就暂停,把变量、堆栈信息发给 VS Code。

它需要几项关键配置(Xdebug 3 的默认值):

zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003

其中 client_port 默认是 9003,VS Code 这边监听同一个端口就能接上头。

三、在 Xserver 里一键开启 Xdebug

手动编译 xdebug 是最劝退的环节:要匹配 PHP 版本、处理 phpize、头文件路径,错一步就白忙。Xserver 把这一步简化成了开关:

  1. 打开「PHP」菜单,选择你的 PHP 版本。
  2. 点击「扩展」入口,打开扩展列表。
  3. 找到 xdebug,把它「开启」。
  4. 回到 PHP 列表,点「重启」,让扩展生效。

重启后,可以点「phpinfo」确认 xdebug 已经加载,或者在终端执行:

Xserver 扩展管理列表

php -m | grep xdebug

能看到 xdebug,说明扩展就绪。Xserver 内置的 PHP 版本都预置了 xdebug 支持,不用自己编译。

四、VS Code 这边怎么配

先安装 PHP 调试插件:

  1. 打开 VS Code,进入扩展市场。
  2. 搜索「PHP Debug」(作者 xdebug),安装。

然后在项目根目录建一个调试配置。打开「运行和调试」面板,点「创建 launch.json」,选 PHP,得到类似这样的配置:

{
   
    "version": "0.2.0",
    "configurations": [
        {
   
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003
        }
    ]
}

关键就是 port: 9003,要和 php.ini 里的 xdebug.client_port 一致。

五、开始第一次断点调试

  1. 在 VS Code 里打开你的 PHP 文件,点行号打一个断点。
  2. 按 F5,启动「Listen for Xdebug」,底部状态栏出现监听中的提示。
  3. 在浏览器里访问对应站点,比如 http://my-blog.test
  4. 代码执行到断点处自动停住,左侧面板能看到变量、调用栈,上方出现单步按钮(F10 单步跳过、F11 步入、Shift+F11 步出)。

PHP 列表页:重启按钮与扩展入口

这就是调试的完整循环:打断点 → 访问页面 → 看变量 → 单步走 → 定位问题。

常见问题

1. 访问页面没进断点

按顺序排查:

  • VS Code 是否在监听(F5 启动,端口 9003);
  • php.ini 里 xdebug.mode=debug 是否设置,xdebug.start_with_request=yes 是否开启;
  • 改完配置有没有重启 PHP;
  • Xdebug 2 和 3 的端口不同:老版本默认 9000,新版默认 9003,两边要一致。

2. 终端里跑脚本不进断点

Web 请求走 nginx + php-fpm,命令行脚本走 CLI SAPI,两者可能加载不同的 php.ini。确认 CLI 用的 PHP 版本和配置文件里也有 xdebug 配置。

3. xdebug 显示已开启,但 php -m 里没有

多半是改完配置没重启,或者重启的是另一个版本。去 Xserver 的 PHP 列表确认目标版本的扩展开关和重启操作都执行了。

4. 端口被占用

9003 被其他程序占用时,换一个端口,同时改 php.ini 的 xdebug.client_port 和 launch.json 的 port,保持一致。

最后

断点调试上手后,你会发现自己再也不想回到 var_dump 时代。配合 Xserver 里的一键扩展管理,整个配置过程不超过 5 分钟。

遇到问题欢迎在评论区留言,也可以到 Xserver 官网反馈 bug 和建议。下载地址:https://x-server.ltd。

目录
相关文章
|
3月前
|
机器学习/深度学习 数据采集 编解码
农田虫害目标检测数据集:12类别 | 目标检测
本数据集含3600张真实农田图像,覆盖秋黏虫、果蝇、红蜘蛛等12类常见虫害(含蚯蚓等益虫),YOLO格式标注,支持YOLOv8/RT-DETR等主流模型。适用于智能监测、无人机巡检与精准施药,助力农业病虫害早期识别与数字化防控。(239字)
183 5
|
18天前
|
人工智能 JavaScript API
DeepSeek Harness 实测:大模型为什么还需要 Harness?
本文深度评测DeepSeek Harness——国产AI编程Agent新工具。作者实测三大任务(幸存者游戏、俄罗斯方块、梁子滑动变阻器),对比GPT/Codex,分析完成时间、Token消耗、费用与效果,并详解其“模型为脑、Harness为手脚”的执行闭环机制及蓬勃发展的插件生态(文件引用、多模态、数据库等)。
349 7
DeepSeek Harness 实测:大模型为什么还需要 Harness?
|
缓存
如何清除keep-alive缓存
如何清除keep-alive缓存
1482 6
|
JSON 定位技术 API
腾讯位置 - 逆地址解析(结尾附视频)
腾讯位置 - 逆地址解析(结尾附视频)
2435 0
使用ruoyi-vue控制数据权限
使用ruoyi-vue控制数据权限
2839 0
Vue3 复制 copy 功能实现(vue-clipboard3)
Vue3 复制 copy 功能实现(vue-clipboard3)
2395 0
|
JavaScript
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
10044 0
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
|
存储 JavaScript
vue页面跳转取消上一个页面请求
本文介绍了在Vue中如何取消上一个页面的请求,以避免页面跳转时请求未完成导致的数据错误。核心方法是使用axios的请求拦截器设置请求的取消令牌(cancelToken),并在vuex中存储这些取消令牌的引用。当进行路由跳转时,通过路由守卫清除这些请求,达到取消上一个页面请求的目的。
781 2
|
固态存储 安全 Java
Maven settings.xml 最全配置详解:从入门到精通
本文深入讲解了 Maven settings.xml 的完整配置项,包含本地仓库路径、镜像源配置、代理设置、认证信息、Profile 多环境切换等核心内容。通过 10 个实战案例展示了企业级配置最佳实践,提供可直接使用的配置文件模板。掌握这些技能,你将能够轻松应对团队标准化、私服集成、多环境部署等场景。适合 Java 开发者、DevOps 工程师阅读。
Maven settings.xml 最全配置详解:从入门到精通
|
5月前
|
人工智能 JavaScript 前端开发
从零开始:手把手教你用Vue构建完美复刻大模型打字效果的对话界面
本文深入解析AI对话应用中流式输出(Streaming)的实现原理与工程实践,涵盖SSE协议选型、Fetch+ReadableStream替代EventSource、Vue响应式流处理、Markdown实时渲染、光标动画、平滑滚动、AbortController中断、DOM性能优化及XSS防护等核心环节,助力打造专业级流式交互体验。(239字)
911 0