入口文件必须在最顶部定义 define('app_debug', true),否则调试功能(trace、sql日志、异常堆栈)静默失效;还需配置 app_trace=true、安装 think-trace 扩展,并清理 runtime 目录。

入口文件必须 define('APP_DEBUG', true) 且位置不能错
ThinkPHP6.x 的调试模式不是靠改配置就能生效的,框架在加载早期就检查 APP_DEBUG 这个常量。如果它没定义,或者定义在 require 框架启动文件之后,整个调试链路(包括 Trace、SQL 日志、异常堆栈)都会静默失效。
常见错误现象:
- 改了
.env里的APP_DEBUG=true,页面还是“页面错误,请稍后再试~” - 改了
config/app.php的'app_debug' => true,但没反应 - Trace 小图标不出现,
runtime/log里也没新日志
实操建议:
- 打开
public/index.php,在文件最顶部、任何require或include之前插入:define('APP_DEBUG', true); - 紧接着加一行:
ini_set('display_errors', '1');,避免 PHP 层吞掉错误 - 删掉整个
runtime/目录(含子目录),否则旧缓存会干扰新配置 - 确认没有 Nginx 的
fastcgi_intercept_errors on;,否则错误页会被拦截成 500
.env 中 APP_TRACE=true 才能显示右下角 Trace 面板
APP_DEBUG=true 只是开关总闸,APP_TRACE=true 才是让 Trace 面板实际渲染出来的关键子开关。TP6 默认不装 think-trace 扩展,即使开了这两个,面板也可能空白。
实操建议:
- 确保项目根目录有
.env文件,内容包含两行(等号前后不能有空格):APP_DEBUG=trueAPP_TRACE=true - 运行
composer require topthink/think-trace安装扩展(TP6.0.12+ 推荐用这个官方包) - 如果用了自定义中间件或重写了
think\exception\Handle,记得在render()方法里调用parent::render($e),否则 Trace 不会注入到响应中 - Trace 面板只对 HTTP 请求生效;命令行执行(如
php think xxx)需用trace()函数或查runtime/log/
Db::listen() 比 getLastSql() 更可靠地抓 SQL 错误
遇到 SQLSTATE[42S22]: Column not found: 1054 Unknown column 这类报错时,直接看 Db::getLastSql() 往往不准——因为 ->fetchSql(true) 不执行、不绑定参数,生成的 SQL 和真实执行的可能差一个表前缀、软删除字段或时间类型转换。
实操建议:
- 在出问题的控制器方法开头加监听:
Db::listen(function ($sql, $time, $explain) { dump($sql); }); - 这样拿到的是**真正发给数据库的语句**,包含自动添加的前缀、
deleted_at IS NULL条件、FROM_UNIXTIME()转换等 - 配合
config/database.php中开启'trace' => true,SQL 会同时记入runtime/log/,方便回溯 - 注意:监听函数里的
$sql是字符串,$explain是执行计划数组,可一起 dump 查看是否走了索引
生产环境别漏掉 show_error_msg=false 这个兜底项
即使 APP_DEBUG=false,如果 config/app.php 里还留着 'show_error_msg'=>true,某些底层 PHP 错误(比如扩展缺失、内存溢出)仍可能暴露堆栈到页面上——这不是调试模式,而是 PHP 原生错误直出,一样危险。
实操建议:
- 上线前检查
config/app.php,确保'show_error_msg'显式设为false - 确认
php.ini中display_errors = Off,且 Web 服务器没用ini_set()覆盖它 - TP6.0.12 之前有个隐患:
var_export类型日志可能把$_POST全量写进runtime/log/,升级到最新版或禁用log.type = 'file'外的其他类型
Trace 面板和 SQL 日志本身不加密、不脱敏,只要开了调试,数据库密码、完整路径、变量值就可能出现在输出或文件里——这点比报错信息本身更值得警惕。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











