調試模式并不能完全滿足我們調試的需要,有時候我們需要手動的輸出一些調試信息。除了本身可以借助一些開發工具進行調試外,ThinkPHP還提供了一些內置的調試工具和函數。例如,頁面Trace功能就是ThinkPHP提供給開發人員的一個用于開發調試的輔助工具。可以實時顯示當前頁面的操作的請求信息、運行情況、SQL執行、錯誤提示等,并支持自定義顯示。
默認頁面trace時

展開的Trace效果

頁面Trace功能對調試模式和部署模式都有效,不過只能用于有頁面輸出的情況(如果你的操作沒有任何輸出,那么可能頁面Trace功能對你幫助不大,你可能需要使用后面的調試方法)。
> 在部署模式下面,顯示的調試信息沒有調試模式完整,通常我們建議頁面Trace配合調試模式一起使用。
要開啟頁面Trace功能,需要在項目配置文件中設置:
~~~
// 顯示頁面Trace信息
'SHOW_PAGE_TRACE' =>true,
~~~
該參數默認為關閉,開啟后并且你的頁面有模板輸出的話,頁面右下角會顯示ThinkPHP的LOGO:
我們看到的LOGO后面的數字就是當前頁面的執行時間(單位是秒) 點擊該圖標后,會展開詳細的頁面Trace信息,如圖:
頁面Trace框架有6個選項卡,分別是基本、文件、流程、錯誤、SQL和調試,點擊不同的選項卡會切換到不同的Trace信息窗口。
| 選項卡 | 描述 |
|-----|-----|
| 基本 | 當前頁面的基本摘要信息,例如執行時間、內存開銷、文件加載數、查詢次數等等。 |
| 文件 | 詳細列出當前頁面執行過程中加載的文件及其大小。 |
| 流程 | 會列出當前頁面執行到的行為和相關流程(待完善)。 |
| 錯誤 | 當前頁面執行過程中的一些錯誤信息,包括警告錯誤。 |
| SQL | 當前頁面執行到的SQL語句信息。 |
| 調試 | 開發人員在程序中進行的調試輸出。 |
頁面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|debug|sql'=>'調試',
'user'=>'用戶'
)
~~~
我們把剛才的用戶信息調試輸出到用戶選項卡,trace方法的用法如下:
`trace($user,'用戶信息','user');`
第三個參數表示選項卡的標識,和我們在TRACE_PAGE_TABS中配置的對應。 默認情況下,頁面Trace窗口顯示的信息是不會保存的,如果希望保存這些trace信息,我們可以配置PAGE_TRACE_SAVE參數
`'PAGE_TRACE_SAVE'=>true`
開啟頁面trace信息保存后,每次的頁面Trace信息會以日志形式保存到項目的日志目錄中,命名格式是: 當前日期_trace.log,例如:12-06-21_trace.log
如果不希望保存所有的選項卡的信息,可以設置需要保存的選項卡,例如:
`'PAGE_TRACE_SAVE' => array('base','file','sql');`
設置后只會保存base、file和sql三個選項卡的信息。
頁面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請求
1. SHOW_PAGE_TRACE為false,也就是頁面Trace關閉的情況下
1. trace方法的第四個參數為true
在這種情況下,trace方法的第三個參數就表示記錄的日志級別,通常包括:
~~~
'ERR' // 一般錯誤: 一般性錯誤
'WARN' // 警告性錯誤: 需要發出警告的錯誤
'NOTIC' // 通知: 程序可以運行但是還不夠完美的錯誤
'INFO' // 信息: 程序輸出信息
'DEBUG' // 調試: 調試信息
'SQL' // SQL:SQL語句
~~~
## 斷點調試
憑借強大的頁面Trace信息功能支持,ThinkPHP可以支持斷點調試功能。 我們只需要在不同的位置對某個變量進行trace輸出即可,例如:
~~~
$blog = D("Blog");
$vo = $blog->create();
trace($vo,'create vo');
$vo = $blog->find();
trace($vo,'find vo');
~~~
- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄