能直接断点进think-orm、think-container及app::run(),前提是xdebug 3已加载且版本匹配(php 7.4+)、php.ini中仅配置xdebug.mode=debug等新参数、phpstorm的pathmappings精确映射到public目录、监听端口为9003并启用监听、浏览器通过xdebug helper(ide key=phpstorm)触发调试。

能直接断点进 think-orm、think-container 甚至框架启动流程里的 App::run(),前提是 Xdebug 3 配置和 PhpStorm 路径映射都对得上——错一个环节,断点就永远灰着。
确认 Xdebug 3 已加载且参数匹配 PHP 版本
ThinkPHP6 要求 PHP ≥ 7.2,但 Xdebug 3 只支持 PHP 7.4+;若你用的是 PHP 8.1 却硬塞 Xdebug 2.9,php -v 不报错,但调试请求根本不会发出去。
- 运行
php -v,输出里必须含xdebug字样,且版本号是3.x - 在项目
public/下建info.php,访问后全选源码,粘到 xdebug.org/wizard,它会告诉你该下哪个php_xdebug-*.dll或.so文件 -
zend_extension必须写绝对路径,Windows 上别用~/ext/xdebug.so这种,D:\php\ext\php_xdebug-3.1.5-7.4-vc15-x86_64.dll才稳
php.ini 中必须启用的 Xdebug 3 调试开关
Xdebug 3 彻底废弃了 xdebug.remote_enable、xdebug.remote_port 这类命名,混用旧参数会导致整个调试链静默失效。
- 最小可用配置只保留这几句:
zend_extension="D:/php/ext/php_xdebug-3.1.5-7.4-vc15-x86_64.dll"xdebug.mode=debugxdebug.start_with_request=triggerxdebug.client_host=127.0.0.1xdebug.client_port=9003xdebug.idekey=PHPSTORM -
xdebug.mode=debug是字符串,不是布尔值 —— 写成on、true、1全部无效 - Windows 用户优先填
127.0.0.1,避免localhost解析慢引发超时;Docker/WSL 环境则必须填宿主机真实 IP(如192.168.42.1),填127.0.0.1就连不上
PhpStorm 的 pathMappings 必须精确指向 public 目录
ThinkPHP6 启动入口是 public/index.php,但实际请求 URL 是 http://localhost:8000/,PhpStorm 如果不知道这个 URL 对应本地哪段路径,断点就永远不触发。
- 打开
Settings → PHP → Servers,新增 Server:
– Name 填tp6-local
– Host 填localhost
– Port 填8000
– 勾选Use path mappings
– 在映射表里:Remote path 填/,Local path 选你项目的public/目录(不是根目录) - 别漏掉
Run → Start Listening for PHP Debug Connections,工具栏电话图标变绿才算监听已开 - 浏览器访问前,先装好 Xdebug Helper 插件(Chrome/Firefox/Edge 都有),并把 IDE Key 设为
PHPSTORM,否则请求里不带XDEBUG_SESSION_START=PHPSTORM,PhpStorm 根本不接
启动 TP6 服务时必须用内置服务器或正确代理
php think run 默认启的是 PHP 内置服务器,端口 8000,它天然支持 Xdebug;但如果你用 Apache/Nginx,就必须确保它们把请求完整透传给 PHP,并带上原始 Host 和 GET 参数。
- 推荐起步用
php think run -H api.tp6.test(-H指定虚拟域名,不影响调试) - 如果用 Apache,确认
httpd.conf或 vhost 里没加SetEnv no-gzip 1这类干扰 header 的配置 - 断点打在
app/controller/Index.php里没问题,但想进vendor/topthink/think-orm/src/Query.php,得确认 PhpStorm 已索引vendor/,且没在Settings → Directories → Excluded里误标为排除目录
最常卡住的地方不是代码逻辑,而是 public/ 目录没被设为 Web Root、pathMappings 里填了项目根目录而非 public、或者 xdebug.client_port 和 PhpStorm 的监听端口不一致——这三个点对不上,断点就只是个灰色圆点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











