调试方法

一. 调试模式
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');

 

posted @ 2015-07-04 22:55  todaytoday  阅读(459)  评论(0编辑  收藏  举报