解析使用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 相关文章推荐
我的论坛源代码(五)
Oct 09 PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
浅析PHP Socket技术
Aug 02 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
PHP6新特性分析
Mar 03 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
PHP中的函数声明与使用详解
May 27 PHP
PHP学习记录之数组函数
Jun 01 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 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
使用Apache的rewrite技术
2006/06/22 PHP
PHP调用MySQL的存储过程的实现代码
2008/08/12 PHP
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
php字符串截取的简单方法
2013/07/04 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
学习Node.js模块机制
2016/10/17 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
python的Template使用指南
2014/09/11 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
python怎么判断模块安装完成
2020/06/19 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
有限责任公司股东合作协议书范本
2014/10/30 职场文书
商务邀请函
2015/01/30 职场文书
工程资料员岗位职责
2015/04/13 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers