解析使用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 相关文章推荐
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php面向对象全攻略 (九)访问类型
Sep 30 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP 快速排序算法详解
Nov 10 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 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中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
jQuery的学习步骤
2011/02/23 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
js实现楼层导航功能
2017/02/23 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
带你了解python装饰器
2017/06/15 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
喜之郎果冻广告词
2014/03/20 职场文书
廉洁使者实施方案
2014/03/29 职场文书
补充协议书范本
2014/04/23 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
党员转正申请报告
2015/05/15 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Pandas自定义选项option设置
2021/07/25 Python