解析使用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 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
PHP关联链接常用代码
Nov 05 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP编程计算日期间隔天数的方法
Apr 26 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设计模式 Adapter(适配器模式)
2011/06/26 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
python占位符输入方式实例
2019/05/27 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
木马的传播途径主要有哪些
2016/04/08 面试题
法学专业应届生求职信
2013/10/16 职场文书
单位领导证婚词
2014/01/14 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
会计系毕业生求职信
2014/05/28 职场文书
雷峰塔导游词
2015/02/09 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
退伍军人感言
2015/08/01 职场文书
图书馆义工感想
2015/08/07 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android