Xdebug安装成功需同时满足模块加载与调试启用:用phpinfo()确认Xdebug区块存在且mode含debug、status为enabled;php -m仅验证CLI环境,不能代表Web环境生效。

能直接在浏览器里看到 Xdebug 模块信息,或者 php -m 输出里有 xdebug,就说明安装成功了——但光有模块不等于能调试,后续配置错一步照样断点不触发。
用 phpinfo() 页面确认 Xdebug 模块已加载
这是最直观的验证方式,重点不是“有没有 Xdebug 字样”,而是看它是否处于启用状态、版本和关键配置项是否符合预期。
- 新建一个
info.php,内容只有一行:<?php phpinfo(); ?>,放在 Web 服务器可访问路径下(如 Nginx 的/var/www/html/或 Apache 的DocumentRoot) - 用浏览器打开
http://localhost/info.php,搜索Xdebug—— 如果页面顶部或中间出现完整区块(含Version、Support、Mode等字段),说明模块已加载 - 注意检查两个关键字段:
mode值是否包含debug(Xdebug 3+);status是否为enabled。如果mode是off或空,即使模块存在也无法调试 - 如果只搜到
xdebug几个零散字母(比如在Loaded Extensions列表里),但没独立区块,说明模块未被正确加载或配置被注释掉了
用 php -m 在命令行快速筛查
这个方法快,但容易误判:它只反映 CLI SAPI 下的扩展状态,和 Web 服务器(如 PHP-FPM 或 mod_php)无关。
- 终端执行:
php -m | grep xdebug,如果输出xdebug,说明 CLI 环境已启用该扩展 - 但 Web 环境可能完全没配——比如你用的是 PHP-FPM,它的配置文件是
/etc/php/8.2/fpm/php.ini,而php -m默认读的是 CLI 的php.ini(通常是/etc/php/8.2/cli/php.ini) - 要确认 Web 环境,必须用
php-fpm -t配合phpinfo()页面,或直接查 FPM 对应的php.ini路径:php-fpm -i | grep "Configuration File" - Windows 用户注意:
php -m可能显示xdebug,但实际是旧版 DLL 路径写错(比如漏了.dll后缀),此时phpinfo()反而没区块——优先信phpinfo()
为什么 phpinfo() 里有 Xdebug 却断点不生效
常见原因不是“没装好”,而是 Xdebug 3+ 的行为逻辑变了,很多配置项默认关闭或值不对。
立即学习“PHP免费学习笔记(深入)”;
-
xdebug.mode必须显式设为debug(或debug,develop),不能只靠zend_extension加载就自动工作 -
xdebug.start_with_request默认是default(即不自动触发),不是yes。想每次请求都连 IDE,得手动加xdebug.start_with_request=yes -
xdebug.client_host和xdebug.client_port必须和 IDE 监听地址/端口严格一致。VS Code 默认监听9003,但很多人还按老教程写9000,结果连接被拒绝却不报错 - PHP-FPM 场景下,
xdebug.client_host不能写localhost(它会解析成::1),得明确写127.0.0.1;Docker 容器内调试宿主机 IDE 时,得写宿主机网关(如172.17.0.1)
真正卡住调试的,往往不是“装没装上”,而是 xdebug.mode 没开、端口不匹配、或 client_host 解析失败——这些在 phpinfo() 里都能一眼看到,别跳过。



















