define('APP_DEBUG',true);

在开启调试模式的状态下,可以给项目设置不同的应用状态,加载不同的项目配置文件,但如论如何都会首先导入框架默认的调试配置文件,该文件位于系统目录的Conf/Debug.php。

系统默认胚子为debug状态,也就是说默认的配置参数是

'APP_STATUS' => 'debug';

如果检测到项目的目录中有debug.php文件,会自动加载给配置文件,并且和系统项目配置文件及系统调试配置文件合并,也就是说,debug.php配置文件只需要噢诶之和项目配置文件以及系统调试配置文件不同的参数或新增的参数。如果想在调试模式下面增加应用状态,例如测试状态,则可以在项目配置文件中改变呢设置如下:

'APP_STATUS' => 'test',

这样的话,系统会自动加载项目配置目录下面的test.php配置文件,可以在test配置文件中改变相关配置。由于调试模式没有任何缓存,因此涉及到较多的文件IO操作和模板实时编译,所以在开启调试模式的情况下,性能有一定的下降,但不会影响部署模式的性能。另外需要注意的是,一旦关闭调试模式,项目的调试配置文件即刻失效。

页面Trace
可以实时显示当前页面的操作的请求信息、运行情况、SQL执行、错误提示等,并支持自定义显示。页面Trace功能对调试模式和部署模式都有效,不过只能用于页面输出的情况。但在部署模式下面,显示的调试信息没有调试模式完整,通常建议页面Trace配合调试模式一起使用。

要开启页面Trace功能,需要在项目配置文件中设置:

'SHOW_PAGE_TACE' => true,//显示页面Trace信息

页面Trace的选项卡是可以定制和扩展的,默认的配置为:

'TRACE_PAGE_TABS' => array(
    'base'=>'基本',
    'file'=>'文件',
    'think'=>'流程',
    'error'=>'错误',
    'sql'=>'SQL',
    'debug'=>'调试',
)

增加用户选项卡

'TRACE_PAGE_TABS' => array(
    'base'=>'基本',
    'file'=>'文件',
    'think'=>'流程',
    'error'=>'错误',
    'sql'=>'SQL',
    'debug'=>'调试',
    'user'=>'用户'
 )




合并某几个选项卡

'TRACE_PAGE_TABS' => array(
    'base'=>'基本',
    'file'=>'文件',
    'think'=>'流程',
    'error|sql|debug'=>'错误',
    'user'=>'用户'
 )



trace($user,'用户信息','user');//把用户信息调试输出到用户选项卡



默认情况下,页面Trace窗口显示的信息是不会保存的,如果希望保存这些tace信息,可以配置

'PAGE_TRACE_SAVE' => true

开启页面trace信息保存后,每次页面Trace信息会以日志形式保存到项目的日志目录中,命名格式是:当前日期_trace.log

如果不希望保存所有的选项卡信息,可以设置需要保存的选项卡,例如:

'PAGE_TRACE_SAVE' =>array('base','file','sql');

设置后只会自动保存base、file和sql三个选项卡信息。

Trace方法

页面Trace只能用于页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用AJAX等操作。

Trace方法格式:trace('变量','标签','级别','是否记录日志'),例如:

$info = '测试信息';
trace($info,'提示');

如果希望把变量调试输出到页面Trace的某个选项卡里,可以使用:

trace($info,'提示','user');

表示输出到user选项卡,如果没有指定选项卡的话,默认会输出到debug选项卡。

trace方法也可以直接抛出异常,但是如果输出到ERR选项卡并且开启'TRACE_EXCEPTION'=>true的话trace($info,'错误','ERR');会抛出异常。

有三种情况,trace方法会记录日志:

1、AJAX请求

2、SHOW_PAGE_TRACE为false,也就是页面Trace关闭的情况下

3、trace方法的第四个参数为true,在这种情况下,trace方法的第三个参数就表示记录的日志级别,通常包括:

'ERR'//一般错误
'WARN'//警告性错误,需要发出警告的错误
'NOTIC'//通知:程序可以运行但是还不够完美的错误
'INFO'//信息:程序输出信息
'DEBUG'//调试:调试信息
'SQL'//SQL:SQL语句



变量调试

输出某个变量是开发过程中常会用到的调试方法,除了使用php内置的var_dump和print_r之外,TP内置了一个队浏览器友好的var_dump方法,用于输出变量的信息到浏览器查看。

用法:dump($var,$echo=true,$label=null,$strict=true)

性能调试

G('begin');
//Codes...
G('end');
//COdes..
echo G('begin','end',length).'s';
echo G('begin','end','m').'kb';



断点调试

只需要在不同的位置对某个变量进行trace输出即可

$blog =  D('Blog');
$vo = $blog->create();
trace($vo,'create vo');
$vo = $blog->find();
trace($vo,'find vo');


错误调试

halt($msg);//输出错误信息,并终止执行


模型调试


模型操作中,为了更好的查明错误,常需要查看下最近使用的SQL语句,可以使用getLastsql方法来输出上次执行的sql语句,例如

$User = M('User');
$User->find(1);
echo $User->getLastSql();
//输出 SELECT * FROM think_user WHERE id = 1