文章出處

一. 調試模式
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');

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()