xdebug 3.x 的 profile 模式必须通过 xdebug.mode=profile 显式启用,xdebug.profiler_enable 已无效;需配合触发机制(如 xdebug.profiler_enable_trigger=1)和正确输出路径配置才能生成 cachegrind 文件。

Xdebug 3.x 的性能分析(profile 模式)不能靠 xdebug.profiler_enable=1 全局开启,必须配合 xdebug.mode=profile 才能生效;否则即使其他参数全对,也不会生成任何 cachegrind 文件。
profile 模式必须显式启用
Xdebug 3 彻底废弃了旧版的独立开关(如 xdebug.profiler_enable),所有功能都由 xdebug.mode 统一控制。只设 xdebug.profiler_enable_trigger=1 而不设 profile 模式,等于没开。
-
xdebug.mode必须包含profile,例如:xdebug.mode=profile或xdebug.mode=debug,profile -
xdebug.profiler_enable在 Xdebug 3 中已完全无效,保留它不会报错,但也不会起作用 - 若同时启用
debug和profile,两者互不干扰,可共存
触发方式:按需生成,避免污染
生产或开发环境都不该默认每次请求都写 profile 文件——体积大、IO高、易填满磁盘。推荐用触发机制精准捕获目标请求。
Xdebug 3.4.1 是一款功能强大的 PHP 调试扩展工具,于 2025 年 1 月 6 日正式发布。作为 Xdebug 3.4 系列的首个修复版本,3.4.1 版在继承上一版本强大功能的同时,重点解决了稳定性问题。该版本不仅修复了访问超全局变量时可能引发的程序崩溃现象,还增强了对 Windows 平台 PIE 构建机制的支持,为广大 PHP 开发者提供了更加稳定的调试环境。这一版本适合所有
- 启用触发:
xdebug.profiler_enable_trigger=1 - 指定触发值(可选):
xdebug.profiler_enable_trigger_value="dev-profile",然后在 URL 加?XDEBUG_PROFILE=dev-profile - 若未设
trigger_value,任意非空值(如?XDEBUG_PROFILE=1)即可触发 - 注意:
xdebug.start_with_request对 profile 模式无影响,它只控制 debug 模式
输出路径与文件名控制
文件名混乱或路径不可写是常见失败原因。Xdebug 不会自动创建目录,且默认权限可能受限。
-
xdebug.profiler_output_dir必须指向一个 PHP 进程有写权限的目录(如/tmp/xdebug-profile),不能是/var/tmp这类系统保护路径 -
xdebug.profiler_output_name支持格式符:%p(进程 ID)、%t(时间戳)、%s(脚本名)、%R(请求 ID)。推荐用cachegrind.out.%R.%t避免重名 - 不要设
xdebug.profiler_append=1:多个请求写入同一文件会导致数据错乱,Xdebug 3 默认为 0,保持即可
查看分析结果前必做两件事
生成的 cachegrind.out.* 是纯文本,直接打开只有函数调用树和耗时数字,人类几乎无法速读。
- 必须用支持 cachegrind 格式的工具:如
qcachegrind(GUI)、webgrind(Web)、或 PhpStorm 内置分析器 -
webgrind依赖 Graphviz 的dot命令生成调用图,若 “Call Graph” 灰掉,大概率是dot不在 PATH 或路径配置错误(如$dotExecutable指向了不存在的路径) - 临时验证是否真生成了有效文件:用
head -n 5 /path/to/cachegrind.out.*,看到类似fl=、fn=、calls=的行,说明文件格式正确
最容易被忽略的是:profile 模式下 xdebug.client_host、xdebug.client_port 这类调试连接参数完全无关,配错也不会影响 profile 生效;但如果你同时开了 debug 模式,它们就会立刻变成关键故障点——别让调试配置干扰性能分析的判断。










