解析使用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知道与问问的采集插件代码
Oct 12 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
php实现概率性随机抽奖代码
Jan 02 PHP
PHP中FTP相关函数小结
Jul 15 PHP
php正则修正符用法实例详解
Dec 29 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
如何理解PHP核心特性命名空间
May 28 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
详解php的socket通信
2015/08/11 PHP
php解决安全问题的方法实例
2019/09/19 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
python自动zip压缩目录的方法
2015/06/28 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Python PO设计模式的具体使用
2019/08/16 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
Shell如何接收变量输入
2016/08/06 面试题
奶茶店创业计划书范文
2014/01/17 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
党员个人剖析材料
2014/09/30 职场文书
具结保证书
2015/01/17 职场文书
2015年读书月活动总结
2015/03/26 职场文书
爱心募捐通知范文
2015/04/27 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
golang定时器
2022/04/14 Golang