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