• 调试方法


    一. 调试模式
    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');
  • 相关阅读:
    获取系统版本
    一句代码删除所有子视图
    MAJOR-MINOR-MKDEV
    AF_UNIX和AF_INET域的socket在epoll中的差异
    python-print
    python-class(5)
    python-class(4)
    python-class(3)
    python-class(2)
    python-class(1)
  • 原文地址:https://www.cnblogs.com/jacson/p/4621412.html
Copyright © 2020-2023  润新知