最后更新 : 2014-08-22 23:43:46
选择语言 :

开发调试

迈启PHP框架深度整合了开发调试功能,能够非常方便的进行开发测试,并且独创的提供了本地开发模式和远程调试功能

本地开发模式

强烈建议本地开发测试时开启本地开发模式

如何开启本地开发模式

打开根目录的config.php文件找到 $config['local_debug_cfg'] 配置选项,可以看到,它的默认值为myqee.debug,你可以修改成自己特有的值,比如 mysite.debug 打开php.ini文件,在里面加入

[MyQEE]
myqee.debug = On

如果你修改成了 mysite.debug ,则加入

[MyQEE]
mysite.debug = On

然后重启php服务器,就开启了本地开发模式

远程调试模式

系统默认是关闭远程调试功能的,需要打开首先需要配置 config.php 中的 $config['debug_open_password'] 参数,是用于开启调试模式的用户名和密码(在V2版本中只有密码),key为用户名,value为密码的md5值,支持多个,留空则关闭此功能。

密码为md5后的值,并非密码明文

例如

$config['debug_open_password'] = array
(
    'myqee' => 'e10adc3949ba59abbe56e057f20f883e',
);

则表示开启远程调试的帐号为myqee,密码为123456(e10adc3949ba59abbe56e057f20f883e 为 123456 的md5值)。

设置好后,你就可以在根目录输入 /opendebugger 路径,比如 http://localhost/opendebugger ,然后会出现输入开启debug的登录框,输入帐号密码即可开启远程调试模式。

一旦开启远程调试模式后,你将可以使用和本地调试模式开启后相似的功能。

如何使用

开启调试模式后
如果PHP程序有错误,所有500错误将会直接输出程序跟踪的信息,你可以直接看到错误的完整内容以及定位错误文件的信息。 另外,在本地开发模式开启后,你可以使用Firefox浏览器安装好FireBug和FirePHP插件,然后打开FireBug控制台,你会看到页面之外的很多系统运行信息。 类似:

debug

这样的信息。

Firebug : http://getfirebug.com/ FirePHP : http://www.firephp.org/

比如包括了系统加载的目录,程序内执行的所有的SQL语句,以及缓存是否命中等等非常多的有用的信息。

除此之外,在正常的页面中,可以增加debug=yes的GET参数打开页面的调试工具。调试工具包含了:查看SQL分析报告,无缓存数据等等非常有用的功能。

更多功能

在编写代码时,你可以使用一下代码判断是否开启debug

if (IS_DEBUG>>1)
{
    //开启了在线调试
    Core::debug()->info('只会在在线debug打开时执行到');
}

if (IS_DEBUG & 1)
{
    //本地调试打开
    Core::debug()->info('只会在在本地开发模式时执行到');
}

if (IS_DEBUG)
{
    // 开启了调试
    Core::debug()->info('在FireBug中可以看到的信息');
}

你可以把你需要调试输出的代码放心的写在if(IS_DEBUG){...}内,这样即便发布到生产环境中也不会对一般用户产生影响。

Core::debug() 方法在测试环境中将会返回一个FirePHP的对象,常用的方法有

查看SQL分析信息

加入GET参数 debug=sql 即可查看SQL分析信息。

页面后面会出现类似如下图示:

会出现一个Database项目,会列出页面执行的每一条SQL的分析结果。

再来一张演示图片:

自定义输出调试信息

输出调试信息其实很简单,主要使用Core::debug()方法即可实现

例如:实现FirePHP的输出信息:

Core::debug()->info('信息内容');
Core::debug()->error('错误信息');
Core::debug()->group('分组开启');
Core::debug()->log('日志信息');
Core::debug()->warn('警示信息');
Core::debug()->table('表格',
    array(
        array('标题一','二','三'),
        array('行1列1','行1列2','行1列3'),
        array('行2列1','行2列2','行2列3'),
    )
);
Core::debug()->groupEnd();      //分组关闭

输出截图如下:

更详细的功能请查看FirePHP相关说明。

自定义输出分析信息

上面的方法实际是是通过header头信息输出的,所以它不会影响页面使用,必须配合FirePHP才可以使用。

现在介绍通过页面尾部输出信息的方式来实现查看详细信息的方法。主要通过方法 Core::debug()->profiler() 来实现。

//判断是否开启
if (IS_DEBUG && Core::debug()->profiler()->is_open())
{
    //执行一个
    $benchmark = Core::debug()->profiler()->start('Test', 'abc');
    //一些代码
    sleep(1);
    //统计结束
    Core::debug()->profiler()->stop();

    //再执行一个试试
    $benchmark = Core::debug()->profiler()->start('Test', 'abc');
    Core::debug()->profiler()->stop();

    //再执行一个def
    $benchmark = Core::debug()->profiler()->start('Test', 'def');
    sleep(1);
    $data = array
    (
        'abc' => 1,
        'def' => 2,
        'aaa' => '输出内容',
    );
    Core::debug()->profiler()->stop($data);
}

执行时在URL上加入?debug=yes 输出截图如下: