解析使用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 相关文章推荐
PHP中去掉字符串首尾空格的方法
May 19 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
php导出excel格式数据问题
Mar 11 PHP
php定时执行任务设置详解
Feb 06 PHP
php计算函数执行时间的方法
Mar 20 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
php array的学习笔记
2012/05/10 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
javascript自定义的addClass()方法
2014/05/28 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python爬虫实例详解
2018/06/19 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python实现网页自动签到功能
2019/01/21 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
营业员演讲稿
2013/12/30 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
小人国观后感
2015/06/11 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python