【转】使用ThinkPHP必须掌握的调试方法
经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉ThinkPHP内置的调试手段和方法,抛开IDE本身自带的调试方式不说,如果你正在用或者打算用ThinkPHP开发的话,那么下面一些和调试Thinkphp程序相关的方法你是应该要了解和掌握的。
1、在项目配置文件里面打开调试模式DEBUG_MODE,这样能够让你发现大部分的错误原因 。可能影响验证码的输出。
2、如果不想使用调试模式,可以单独开启页面Trace显示。发现很多人不想使用调试模式的原因居然是因为有页面Trace信息的输出,其实这里面有一个误区,以为调试模式就一定会有页面Trace,但其实调试模式和页面Trace没有必然的关系,只是因为打开调试模式后,系统默认的调试配置文件会开启页面Trace显示,所以你完全可以给项目单独定义调试配置文件。
3、使用系统定义的dump函数,该方法同var_dump可以输出任何类型的变量信息,而且更加有利于在浏览器里面查看,例如:
$User=D("User");
$list=$User->findAll(); 3. 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)方法,例如: 1.debug_start('demo'); 2. //这里是你的代码段
debug_start('demo');
//这里是你的代码段.......debug_end('demo');
本文转载自: PHP程序员笔记
【转】使用ThinkPHP必须掌握的调试方法的更多相关文章
- 解析使用ThinkPHP应该掌握的调试手段
解析使用ThinkPHP应该掌握的调试手段 使用ThinkPHP应该掌握的调试手段经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉 ...
- thinkPHP实现静态页的方法-buildHtml
thinkphp全站静态页实现方法! 1:在根目录下的全局index.php中加下面这行: define('HTML_PATH', './htm');//生成静态页面的文件位置 2:在项目的配置文件c ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...
- linux Ubuntu(Segmentation fault)段错误出现原因及调试方法
在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...
- kernel启动console_init之前console不可用时发生crash的调试方法
http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- 【matlab】MATLAB程序调试方法和过程
3.8 MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...
- 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- Linux的段错误调试方法
linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...
随机推荐
- 为什么需要异步?why?来看一段代码。
为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...
- Maxmum subsequence sum problem
We have a lot of ways to solve the maximum subsequence sum problem, but different ways take differen ...
- Delphi用ADOquery主从表例子(转)
http://blog.csdn.net/kandy_zheng/article/details/1639184 在sql server 的northwide 中建立主表 create table s ...
- WTL消息以及处理函数声明
MSG_WM_CREATE LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct); MSG_WM_INITDIALOG LRESULT OnInitDialo ...
- Chapter7 迭代器
结合泛型for的所有功能,写出更加简单,高效的迭代器. 1.迭代器和closure 迭代器是一种可以遍历集合中所有元素的机制.在Lua中用函数去表示它. 每调用一次,就返回下一个元素. 迭代器在两次成 ...
- SharePoint 2013 InfoPath 无法保存下列表单
转载自:http://www.cnblogs.com/jianyus/p/3470121.html 在使用InfoPath发布表单,发布到SharePoint服务器报错,如下介绍: 环境:Window ...
- android基础知识点复习之短信发送
界面布局: activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an ...
- MFC中修改默认启动对话框方法
// CMyAppEApp 初始化 BOOL CMyAppEApp::InitInstance(){// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dl ...
- JS操作select标签
主要利用这个来实现省市区三级联动的 我利用的是ajax,每一次onchange事件都改变相对应的select中的option,数据全是ajax请求服务器查询数据库而来的,效果还可以,在本地测试的时候速 ...
- uci随笔
UCI : Unified Configuration Interface1.基于nvram配置2.只需修改UCI配置文件3.配置文件存放在路径/etc/config/目录下4.可以通过uci命令或者 ...