解析使用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 相关文章推荐
Discuz板块横排显示图片的实现方法
May 28 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
php打造属于自己的MVC框架
Mar 07 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
php对象和数组相互转换的方法
May 12 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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 正则表达式的学习探讨
2013/06/06 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
python中列表和元组的区别
2017/12/18 Python
Python中函数参数调用方式分析
2018/08/09 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
高性能装备提升营地:Kammok
2019/02/27 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
证婚人经典证婚词
2014/01/09 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015年保送生自荐信
2015/03/24 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书