调试方法

一. 调试模式
ThinkPHP 专门为开发过程而设置了调试模式,调试模式开启后,特别方便我们进行排
错和调整。但由于它执行效率会稍低,所以在正式部署项目的时候,关闭调试模式。

1 // 入口文件处,开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
2 define(‘APP_DEBUG‘,t t rue);

开启来会告诉你错误的一些具体信息,部署项目后,错误信息是给用户看的,这时不需要列出错误的具体信息在哪

下图为用户看到的错误页面

调试模式在开发中的优势在于:

1.开启日志记录,任何错误和调试信息都会详细记录;
2.关闭模版缓存,模版修改可以及时生效;
3.记录 SQL 日志,方便分析 SQL;
4.关闭字段缓存,数据表字段修改不受缓存影响;
5.严格检查文件大小写,帮助提前发现 Linux 部署问题;
6.通过页面 Trace 功能更好的调试和发现问题。

二. 异常处理
和 PHP 默认的异常处理不同,ThinkPHP 抛出的不单纯的错误信息,而是一个人性化的
错误页面。当然,我们也可以自行调用这种错误信息。

1 //手动抛出异常
2 E(‘失败!‘);

这时 E(‘失败!‘) 会触发失败,即使其它代码没有错误:

三. 模型调试
在模型操作中,为了更好的查明错误,经常需要查看下最近使用的 SQL 语句。

1 //获取最近的SQL语句
2  echo $user->getLastSql();
1 //查看SQL的错误信息
2 $list = $user->query("SELECT * FROM bbb");
3  echo $user->getDbError();

输出的错误信息为: 1146:Table ‘thinkphp.bbb‘ doesn‘t exist [ SQL语句 ] : SELECT * FROM bbb

四. 性能调试
我们可以使用大 G()方法,来测试某段代码的内存开销和运行时间。

1 //包裹要测试的代码
2 G(‘begin‘);
3   $user = D(‘User‘);
4   $list = $user->select();
5   $this->assign(‘list‘, $list);
6   $this->display();
7 G(‘end‘);
1 //计算运行时间,单位秒
2  echo G(‘begin‘,‘end‘).‘s‘;
1 //计算消耗内存,单位kb
2  echo G(‘begin‘,‘end‘,‘m‘).‘kb‘;

PS:如果你的环境不支持内存消耗测试,它会自动按时间运算。

五. 变量调试
在开发中,我们经常需要对变量进行调试。一般会采用 PHP 自带的 var_dump()
和 print_r 方法,ThinkPHP 内置了一个对浏览器友好的 dump()方法,用于输出变量
信息。

1 //参数1必选,其他可选
2 dump($list,  true,  null,  false);

PS:参数 1 为变量,参数 2 为是否打印,参数 3 标识,参数 4 是否采用 print_r。

第二个参数是为是否将获取的$list数组打印出来

第三个参数,如 dump($list, true, admin, true); ,则打印的结果为:

最后的参数为false时,打印的结果如下:

为true时

六. 日志记录
日志处理是系统自动进行的,在开启日志记录的情况下,会记录下运行的日志级别
的所有日志信息。
一般情况下,SQL 日志级别必须在调试模式下开启有效,否则不会记录。默认情
况下,一般在调试模式下记录日志,如果要在部署模式下开启日志记录,则需要进行配
置。

生成的日志在 WeiBo/Runtime/logs 中。

在 WeiBo/Common/Conf/config.php 中进行配置

1 //部署模式下开启日志记录
2 ‘LOG_RECORD‘ => true,
1 //运行的日志记录级别
2 ‘LOG_LEVEL‘ =>‘EMERG,ALERT,CRIT,ERR‘,

ThinkPHP 对系统的日志按照级别来分类,包括:

1. EMERG 严重错误,导致系统崩溃无法使用
2. ALERT 警戒性错误, 必须被立即修改的错误
3. CRIT 临界值错误, 超过临界值的错误
4. ERR 一般性错误
5. WARN 警告性错误, 需要发出警告的错误
6. NOTICE 通知,程序可以运行但是还不够完美的错误
7. INFO 信息,程序输出信息
8. DEBUG 调试,用于调试信息
9. SQL SQL 语句,该级别只在调试模式开启时有效
1 //手动写入,第二参数为级别,第三为强制
2 Log:: record(‘日志‘,‘WARN‘, true)
1 //不受配置文件影响
2 Log:: write (‘日志‘,‘WARN‘);
不受配置文件影响的原因是在代码部署时,如果实在开发的情况下,则会

强制的原因是当 define(‘APP_DEBUG‘,false); 时,没有调试模式了,默认是不写入日志的,但强制写入还是会写入日志的。

Log:: write 是不管什么情况,还是会写入日志文件里的。

七.Track
ThinkPHP 提供了一个非常方便的调试工具:页面 Track。这个工具必须在调试模式下有效。

1 //页面Trace
2 ‘SHOW_PAGE_TRACE‘ => true,
1 //设置要显示的调试模块
2 ‘TRACE_PAGE_TABS‘=> array(
3     ‘base‘=>‘基本‘,
4     ‘file‘=>‘文件‘,
5     ‘think‘=>‘流程‘,
6     ‘error‘=>‘错误‘,
7     ‘sql‘=>‘SQL‘,
8     ‘debug‘=>‘调试‘
9 ),
1 //调试方法
2 trace(‘调试方法‘, ‘提示‘, ‘user‘);
时间: 2024-11-13 21:53:28

调试方法的相关文章

Windows 下常见的反调试方法

稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebuggerPresent(),这API实际上就是访问PEB的BeingDebugged标志来判断是否处于调试状态. if (IsDebuggerPresent()) //API接口 { AfxMessageBox(L"检测到调试器"); } else { AfxMessageBox(L&qu

VC的常用调试方法

前言 VS是非常强大的IDE,所以掌握VSVC的常用方法,将会使得我们找出问题解决问题事半功倍. 目录 VSVC的常用调试方法 前言 1. Watch窗口查看伪变量 2. 查看指针指向的一序列值 3. 内存泄露查找 4. 调试Release版本 5. 远程调试 6. 函数断点 7. 数据断点. 8. 代码执行时间 9. 格式化数据 10. 格式化内存 Watch窗口查看伪变量 按MSDN的介绍,伪变量就是用来查看特定信息的术语.例如当调用的API失败时,可以用GetLastError获取对应的错

Android快速调试方法

Android快速调试方法 前言:目前市面上OTT网络机顶盒几乎全部使用Android系统,公司目前是多个人使用一个编译服务器,编译一次Android系统花费时间较长,调试Android某一部分功能时候就不得不编译整个Android系统来调试,严重降低了工作开发效率,巧合之下看到公司大牛写的Android调试方法,放与网络与大家参考学习. 公司网络机顶盒(OTT)盒子使用Amlogic提供的芯片,下面就以amlogic Android系统为例. 1 Uboot快速调试方法 1.1 编译 #! /

Firefox下javascript调试方法

前面博文谈了一下IE浏览器下javascript的调试方法,今天没事干就把火狐浏览器(Firefox)下的javascript调试方法也看了一下,记录在此,希望对大家有所帮助. 我们这次使用的代码页面为document获取对象博文中的按name属性获取对象的代码. <html> <head> <title>getElementsByName</title> </head> <body> <form id="form1&

实验4:掌握Android应用调试方法、添加新界面

第四章代码清单: Android应用调试方法 第五章代码清单: 添加新界面

linux kernel将关键信息保存到文件做法 很好的调试方法

linux kernel将关键信息保存到文件做法      很好的调试方法 下面有2个示例: 1:保存机器从开机到结束的VBATT: 2:保存uart接收到的数据到文件: 意义不多说了. 以下是代码: #include <linux/fs.h> #include <asm/uaccess.h> #include <asm/unaligned.h> static struct file *fp =NULL; int write_to_file (char *buf, in

JAVA card 应用开发 JCOP的调试方法

本文讲述如何在仿真环境下,调试JAVA card 的APPLET. 通过JCOP在Eclipse进行仿真调试,启动JCOP调试器,我们可以看到如下图: 要仿真调试,就是在命令输入框里面输入JCOP相关的指令,通过阅读JCOP的帮助文档,我们看到JCOP提供的命令不算繁多,大约40个. 下面我挑选常用的几个来说明: 1.      复位卡片:"/atr",如果不加任何参数,表示立即复位. 2.      发送指令:"/send",这是最直观的调试指令.可以逐个指令发送

codeblocks基本调试方法

我们将以下面的例子介绍const变量和static变量的存放位置: static int val_a = 1; // 初始化的静态变量 int val_b = 2;        // 全局变量 const int val_c = 3;  // const 全局变量 static int val_d;     // 未初始化的静态变量 int val_e;            // 未初始化的全局变量 int main() { static int val_f = 5;  // 初始化的局部静

微信公众平台开发调试方法

在这篇微信公众平台开发教程中,我们将介绍如何进行微信公众平台上的开发调试方法. 一.方倍微信调试器 微信调试器是方倍工作室开发的用于微信公众平台接口开发调试的工具,具有Token校验.模拟关注及取消关注.发送文本/图片/语音/视频/位置/链接.模拟事件发送等功能.其原型是微擎的Emulator. 微信调试器目前不支持IE浏览器下的使用,请下载Chrome浏览器或下载Firefox浏览器. 微信调试器的地址是 http://debug.fangbei.org/ .其界面如下 使用方法 1. Tok