解析使用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的ob_start() 控制您的浏览器cache
Aug 03 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
php中的异常和错误浅析
May 03 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
PHP实现基于状态的责任链审批模式详解
May 31 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
详解JavaScript的BUG和错误
2018/05/07 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python实现自动更换ip的方法
2015/05/05 Python
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python 获取网页编码方式实现代码
2017/03/11 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
《自选商场》教学反思
2014/02/14 职场文书
公司活动总结范文
2014/07/01 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis