解析使用ThinkPHP应该掌握的调试手段


Posted in PHP onJune 20, 2013

使用ThinkPHP应该掌握的调试手段
经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉ThinkPHP内置的调试手段和方法,抛开IDE本身自带的调试方式不说,如果你正在用或者打算用ThinkPHP开发的话,那么下面一些和调试相关的方法你是应该要了解和掌握的:
1、在项目配置文件里面打开调试模式DEBUG_MODE,这样能够让你发现大部分的错误原因 。可能影响验证码的输出。

2、如果不想使用调试模式,可以单独开启页面Trace显示。发现很多人不想使用调试模式的原因居然是因为有页面Trace信息的输出,其实这里面有一个误区,以为调试模式就一定会有页面Trace,但其实调试模式和页面Trace没有必然的关系,只是因为打开调试模式后,系统默认的调试配置文件会开启页面Trace显示,所以你完全可以给项目单独定义调试配置文件。

3、使用系统定义的dump函数,该方法同var_dump可以输出任何类型的变量信息,而且更加有利于在浏览器里面查看,例如:

$User = D("User");
$list    = $User->findAll();
dump($list);

4、页面Trace信息只能显示当前页面执行的sql语句,但无法查看ajax方式执行的后台操作里面的sql语句,所以你还可以开启sql日志记录SQL_DEBUG_LOG 来记录每一条执行的sql语句,并且可以查看到每条sql语句的执行时间 sql日志文件位于Logs目录下面,会自动按日期来区分每天的sql日志。

5、另外一个是在执行某个数据操作后怀疑sql执行有错误的话,可以使用模型类的getLastSql方法来查看上次执行的sql语句,以便分析具体的错误原因。例如:

$User = D("User");
$User->id = 3;
$User->name = 'ThinkPHp';
$User->save();
echo $User->getLastSql();
// 输出 update think_user set name='ThinkPHP' where id=3;

6、当需要调试某段代码的运行时间的时候,可以使用系统提供的debug_start($label)和debug_end($label)方法,例如:
debug_start('demo');
// 这里是你的代码段.......
debug_end('demo');

 

PHP 相关文章推荐
最省空间的计数器
Oct 09 PHP
聊天室php&mysql(六)
Oct 09 PHP
Windows下的PHP5.0详解
Nov 18 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 #PHP
php Xdebug的安装与使用详解
Jun 20 #PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 #PHP
hadoop中一些常用的命令介绍
Jun 19 #PHP
hadoop常见错误以及处理方法详解
Jun 19 #PHP
php常用Output和ptions/Info函数集介绍
Jun 19 #PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 #PHP
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
php简单日历函数
2015/10/28 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
javascript编程起步(第五课)
2007/02/27 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
js实现五星评价功能
2017/03/08 Javascript
详解react-redux插件入门
2018/04/19 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
护士演讲稿范文
2014/01/05 职场文书
药品采购员岗位职责
2014/02/08 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
统计工作个人总结
2015/03/03 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书