yii2 debug模块显示需满足三条件:YII_DEBUG为true、客户端IP在allowedIPs白名单中、且仅在YII_ENV_DEV环境下注册;常用配置含historySize、allowedIPs和panels;sql语句不可见常因enableLogging关闭或绕过Yii DB层;Profiling面板需xdebug支持,否则仅显示粗略耗时。

怎么让 Yii2 的 debug 模块显示出来
默认情况下,debug 面板根本不会出现——不是装了就自动生效。关键看三件事:YII_DEBUG 开关、IP 白名单、以及是否在非生产环境运行。
-
YII_DEBUG必须为true(通常在web/index.php里设置) -
$_SERVER['REMOTE_ADDR']必须在modules.debug.allowedIPs列表中,默认只允许['127.0.0.1', '::1'];线上调试时别忘了加自己 IP,但切记上线前删掉或锁死 - 不能在
env=prod下启用,否则模块压根不注册——检查config/web.php是否只在YII_ENV_DEV里配置了debug模块
yiidebugModule 的常用配置项有哪些
最常调的就三个:日志保留天数、面板可见性、数据收集粒度。改错一个就可能看不到 SQL 或慢请求。
-
historySize:默认 50,指最多存多少次调试会话;太小会丢历史,太大占磁盘,建议设为20~100之间 -
allowedIPs:如上所述,必须显式写全,['*']在本地可以,但绝不能进 git 或上预发 -
panels:可关闭不用的面板,比如禁用'profiling' => false能省点开销;但若想查 SQL 执行时间,'db' => yiidebugpanelsDbPanel::class就不能关
为什么点了 SQL 面板却看不到具体语句或参数
常见于用了 createCommand() 但没开启日志级别,或者用了原生 pdo 绕过了 Yii 的 DB 层。
- 确认
DbPanel已启用且yiidbConnection::enableLogging为true(默认是 true,但有些项目手动关了) - 参数绑定后显示的是
:name占位符,不是真实值;要看到实际参数得点开每条 SQL 后的「Params」展开项 - 批量插入、事务内多条语句、或使用
yiidbCommand::batchInsert()时,部分语句可能被合并或截断,这时得配合日志文件看完整输出 - 如果用了
Yii::$app->db->pdo直接操作,debug模块完全捕获不到——所有 DB 操作必须走Yii::$app->db实例
性能面板里 Profiling 时间不准或空白怎么办
这个面板依赖 PHP 的 xdebug 或 tideways 扩展,纯原生 PHP 不提供函数级耗时数据。
- 没装
xdebug?Profiling面板就只能显示总请求时间和几个大节点(如Application Init),点不开函数树 -
xdebug.mode=profile必须开启(Yii2.0.40+ 要求 Xdebug 3+),旧版 Xdebug 2 用xdebug.profiler_enable - 注意:Xdebug 会显著拖慢响应,只在本地或测试机开;生产环境绝对不要启用
- 如果只关心 SQL 和路由耗时,其实
Timeline面板更直观,它不依赖扩展,靠 Yii 自身事件打点
调试工具本身不解决性能问题,但它暴露问题的位置很准——尤其是那些你以为“应该很快”的地方,往往卡在你没注意的循环里或没索引的查询上。别只盯着绿色勾号,重点看红色时间戳和 SQL 的执行次数。