一.调试模式 ThinkPHP 专门为开发过程而设置了调试模式,调试模式开启后,特别方便我们进行排 错和调整。但由于它执行效率会稍低,所以在正式部署项目的时候,关闭调试模式。 // 入口文件处,开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',true); 调试模式在开发中的优势在于: 1.开启日志记录,任何错误和调试信息都会详细记录; 2.关闭模版缓存,模版修改可以及时生效; 3.记录 SQL 日志,方便分析 SQL; 4.关闭字段缓存,数据表字段修改不受缓存影响; 5.严格检查文件大小写,帮助提前发现 Linux 部署问题; 6.通过页面 Trace 功能更好的调试和发现问题。
二.异常处理 和 PHP 默认的异常处理不同,ThinkPHP 抛出的不单纯的错误信息,而是一个人性化的 错误页面。当然,我们也可以自行调用这种错误信息。 //手动抛出异常 E('失败!'); 三.模型调试 在模型操作中,为了更好的查明错误,经常需要查看下最近使用的 SQL 语句。 //获取最近的SQL语句 echo $user->getLastSql();
//查看SQL的错误信息 $list = $user->query("SELECT * FROM bbb"); echo $user->getDbError(); 四.性能调试 我们可以使用大 G()方法,来测试某段代码的内存开销和运行时间。 //包裹要测试的代码 G('begin'); $user = D('User'); $list = $user->select(); $this->assign('list', $list); $this->display(); G('end');
//计算运行时间,单位秒 echo G('begin','end').'s'; echo '<br />'; //计算消耗内存,单位kb echo G('begin','end','m').'kb'; PS:如果你的环境不支持内存消耗测试,它会自动按时间运算。
五.变量调试 在开发中,我们经常需要对变量进行调试。一般会采用 PHP 自带的 var_dump() 和 print_r 方法,ThinkPHP 内置了一个对浏览器友好的 dump()方法,用于输出变量 信息。 //参数1必选,其他可选 dump($list, true, null, false); PS:参数 1 为变量,参数 2 为是否打印,参数 3 标识,参数 4 是否采用 print_r。
六.日志记录 日志处理是系统自动进行的,在开启日志记录的情况下,会记录下运行的日志级别 的所有日志信息。 一般情况下,SQL 日志级别必须在调试模式下开启有效,否则不会记录。默认情 况下,一般在调试模式下记录日志,如果要在部署模式下开启日志记录,则需要进行配 置。 //部署模式下开启日志记录 'LOG_RECORD' =>true, //运行的日志记录级别 'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR',
ThinkPHP 对系统的日志按照级别来分类,包括: 1.EMERG严重错误,导致系统崩溃无法使用 2.ALERT警戒性错误, 必须被立即修改的错误 3.CRIT临界值错误, 超过临界值的错误 4.ERR一般性错误 5.WARN警告性错误, 需要发出警告的错误 6.NOTICE通知,程序可以运行但是还不够完美的错误 7.INFO信息,程序输出信息 8.DEBUG调试,用于调试信息 9.SQL SQL 语句,该级别只在调试模式开启时有效
//手动写入,第二参数为级别,第三为强制 Log::record('日志','WARN',true); //不受配置文件影响 Log::write('日志','WARN');
七.Track ThinkPHP 提供了一个非常方便的调试工具:页面 Track。这个工具必须在调试模式下有 效。 //页面Trace 'SHOW_PAGE_TRACE' =>true, //设置要显示的调试模块 'TRACE_PAGE_TABS'=>array( 'base'=>'基本', 'file'=>'文件', 'think'=>'流程', 'error'=>'错误', 'sql'=>'SQL', 'debug'=>'调试' ), //调试方法 trace('调试方法', '提示', 'user');