解析使用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图片加水印原理(超简单的实例代码)
Jan 18 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
浅谈PHP的反射机制
Dec 15 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PDO::prepare讲解
Jan 29 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python数组复制拷贝的实现方法
2015/06/09 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
详解python 注释、变量、类型
2018/08/10 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
简单而又朴实的个人求职信分享
2013/12/12 职场文书
高考标语大全
2014/06/05 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
公司放假通知怎么写
2015/04/15 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android