解析使用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 30 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
PHP安全上传图片的方法
Mar 21 PHP
php使用正则表达式获取字符串中的URL
Dec 29 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
php屏蔽错误及提示的方法
May 10 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
php报错502badgateway解决方法
2019/10/11 PHP
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python中list列表的高级函数
2016/05/17 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
python操作链表的示例代码
2020/09/27 Python
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
实习护士自我鉴定
2013/10/13 职场文书
节能环保演讲稿
2014/08/28 职场文书
公证书
2019/04/17 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs