xdebug 3 已加载且版本正确需运行php -v确认输出含“xdebug v3.x.x”字样,或通过phpinfo()搜索“xdebug”验证模块存在;注意xdebug.mode=profile为xdebug 3专用语法,不可与xdebug 2配置混用。

确认 Xdebug 3 已加载且版本正确
运行 php -v,输出中必须包含类似 Xdebug v3.3.1 的字样;如果只看到 PHP 版本没提 Xdebug,说明扩展没加载。也可以用 php --ini 找到生效的 php.ini 路径,再写个 test.php 调用 phpinfo(),搜索 “xdebug” 看模块是否出现。注意:xdebug.mode=profile 是 Xdebug 3 专用语法,Xdebug 2 用的是 xdebug.profiler_enable=1,混用会导致配置无效。
php.ini 中正确启用 profile 模式
在 php.ini 文件末尾添加以下几行(路径、权限、端口等必须按实际环境调整):
zend_extension=xdebug.so xdebug.mode=profile xdebug.output_dir=/tmp/xdebug xdebug.start_with_request=no xdebug.trigger_value=PROFILING
关键点:
Xdebug 3.4.1 是一款功能强大的 PHP 调试扩展工具,于 2025 年 1 月 6 日正式发布。作为 Xdebug 3.4 系列的首个修复版本,3.4.1 版在继承上一版本强大功能的同时,重点解决了稳定性问题。该版本不仅修复了访问超全局变量时可能引发的程序崩溃现象,还增强了对 Windows 平台 PIE 构建机制的支持,为广大 PHP 开发者提供了更加稳定的调试环境。这一版本适合所有
-
xdebug.mode=profile单独启用性能分析,不启动调试;加多个模式如xdebug.mode=develop,profile也合法,但会叠加开销 -
xdebug.output_dir目录必须存在,且 Web 服务器进程(如 www-data、apache 或 php-fpm 用户)有写权限;/tmp/xdebug是常见安全选择 -
xdebug.start_with_request=no防止每次请求都生成文件——否则高并发下磁盘 I/O 和文件数量会失控 -
xdebug.trigger_value=PROFILING配合XDEBUG_TRIGGER=PROFILING请求参数或 Cookie 使用,实现按需触发
如何触发并验证性能文件生成
不改代码、不重启服务,仅靠一次 HTTP 请求就能启动分析:
- 浏览器访问时加参数:
https://yoursite.com/test.php?XDEBUG_TRIGGER=PROFILING - 用 curl 测试:
curl -H "XDEBUG_TRIGGER: PROFILING" https://yoursite.com/test.php - 确保响应头或页面无报错,然后检查
xdebug.output_dir下是否生成了类似cachegrind.out.12345的文件 - 如果没生成,查
xdebug.log(可加xdebug.log=/tmp/xdebug.log)看有没有Profiler: enabled或权限拒绝提示
查看 cachegrind 文件的实用工具链
生成的 cachegrind.out.* 是文本格式,不能直接读,得靠可视化工具:
- Linux/macOS 推荐
KCacheGrind:安装后直接双击打开,能看调用树、独占时间(Self)、总耗时(Incl)、内存变化 - Windows 用
WinCacheGrind或QCacheGrind(跨平台 Qt 版) - 不想装桌面软件?用
WebGrind:它是个 PHP 脚本,把cachegrind.out.*放进其cache/目录,用浏览器访问即可分析 - 注意:
dot命令(Graphviz)不是必须项,但启用调用图(Call Graph)功能时需要;Mac 上常用brew install graphviz,Linux 用apt install graphviz
最容易被忽略的是 xdebug.output_dir 权限和 xdebug.start_with_request 的默认值——Xdebug 3 默认是 no,很多人照抄旧教程设成 yes,结果一上线就拖垮服务器。










