解析使用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 09 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
php基于协程实现异步的方法分析
Jul 17 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
php session和cookie使用说明
2010/04/07 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php中的异常和错误浅析
2017/05/03 PHP
php intval函数用法总结
2019/04/14 PHP
JQuery for与each性能比较分析
2013/05/14 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
一个基于flask的web应用诞生(1)
2017/04/11 Python
理论讲解python多进程并发编程
2018/02/09 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
django和flask哪个值得研究学习
2020/07/31 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
经济职业学院毕业生自荐书
2014/03/17 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
2015年营业员工作总结
2015/04/23 职场文书
项目合作意向书
2015/05/08 职场文书
在Docker容器中部署SQL Server
2022/04/11 Servers
解决MySQL报“too many connections“错误
2022/04/19 MySQL