xdebug_trigger不是独立开关,必须配合xdebug.mode=profile和xdebug.start_with_request=trigger才能启动性能剖析;单独设置无效,常见原因包括mode未含profile、start_with_request非trigger、output_dir无写权限或配置未生效。

XDEBUG_TRIGGER 不是独立开关,它只是 Xdebug 3 的“触发器钥匙”——只有配合 xdebug.mode=profile 和 xdebug.start_with_request=trigger 才能真正启动性能剖析。单独加参数毫无作用。
为什么加了 XDEBUG_TRIGGER 却没生成 cachegrind 文件?
这是最常踩的坑:开发者只在 URL 或 curl 里加 XDEBUG_TRIGGER=1,但 php.ini 里没配对启用 profile 模式或触发策略。
-
xdebug.mode必须包含profile(例如xdebug.mode=develop,profile),否则 Xdebug 根本不加载 profiler 子系统 -
xdebug.start_with_request必须设为trigger,设成yes会每次都启动,设成no则永远不响应 -
xdebug.output_dir目录必须存在且 PHP 进程有写权限,否则静默失败(日志里也不报错)
三种合法的 XDEBUG_TRIGGER 触发方式
Xdebug 3 支持从多个入口读取该值,优先级从高到低:
- HTTP 请求头:
XDEBUG_TRIGGER: perf(推荐,不暴露在日志/访问记录中) - GET/POST 参数:
?XDEBUG_TRIGGER=perf或&XDEBUG_TRIGGER=perf - Cookie:
XDEBUG_TRIGGER=perf(需确保 Cookie 被正确发送且未被框架过滤)
注意:XDEBUG_TRIGGER 的值本身无意义(不校验内容),只要存在该 key 就触发。但建议统一用 perf 或 profile 便于识别。
Xdebug 3.4.1 是一款功能强大的 PHP 调试扩展工具,于 2025 年 1 月 6 日正式发布。作为 Xdebug 3.4 系列的首个修复版本,3.4.1 版在继承上一版本强大功能的同时,重点解决了稳定性问题。该版本不仅修复了访问超全局变量时可能引发的程序崩溃现象,还增强了对 Windows 平台 PIE 构建机制的支持,为广大 PHP 开发者提供了更加稳定的调试环境。这一版本适合所有
如何验证 profiler 是否真的启动了?
不能只看文件是否生成——有时因权限或路径错误,Xdebug 会跳过写入但不报错。可靠验证方式:
- 开启
xdebug.log=/tmp/xdebug.log,请求后检查日志里是否有profiler: enabled字样 - 检查返回的 HTTP 响应头是否新增了
X-Xdebug-Profile(Xdebug 3.3+ 默认开启) - 确认
/tmp/xdebug/(或你设的xdebug.output_dir)下生成了类似cachegrind.out.<pid></pid>的文件,且大小 > 0
如果文件为空或根本没出现,大概率是 xdebug.mode 没生效,或者 PHP 进程没读到你改的配置(比如 CLI 和 FPM 用的是不同 php.ini)。
真正容易被忽略的是:Xdebug 3 的 profiler 一旦触发,会对**整个请求生命周期**做全量函数调用采样,哪怕只加一次 XDEBUG_TRIGGER,也会显著拖慢响应——别在压测或线上流量里随手试。










