ThinkPHP3.1快速入門(七)調(diào)試_第1頁
ThinkPHP3.1快速入門(七)調(diào)試_第2頁
ThinkPHP3.1快速入門(七)調(diào)試_第3頁
ThinkPHP3.1快速入門(七)調(diào)試_第4頁
ThinkPHP3.1快速入門(七)調(diào)試_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ThinkPHP3.1快速入門(7)調(diào)試本篇我們來全面了解下如何在ThinkPHP開發(fā)過程中進(jìn)行調(diào)試工作。調(diào)試模式說到調(diào)試,我們可能第一個想到的就是調(diào)試模式,沒錯,ThinkPHP也有專門為開發(fā)過程而設(shè)置的調(diào)試模式,ThinkPHP的調(diào)試模式與眾不同,會犧牲一定的執(zhí)行效率,但帶來的方便和除錯功能非常值得。我們強(qiáng)烈建議ThinkPHP開發(fā)人員在開發(fā)階段始終開啟調(diào)試模式(直到正式部署后關(guān)閉調(diào)試模式),方便及時發(fā)現(xiàn)隱患問題和分析、解決問題。-more-開啟調(diào)試模式很簡單,只需要在入口文件中增加一行常量定義代碼:<?php/開啟調(diào)試模式define('APP_DEBUG'

2、,true);/加載框架入口文件require'./ThinkPHP/ThinkPHP.php'復(fù)制代碼在完成開發(fā)階段部署到生產(chǎn)環(huán)境后,只需要刪除調(diào)試模式定義代碼即可切換到部署模式。調(diào)試模式的優(yōu)勢在于:開啟日志記錄,任何錯誤信息和調(diào)試信息都會詳細(xì)記錄,便于調(diào)試;關(guān)閉模板緩存,模板修改可以即時生效;記錄SQL日志,方便分析SQL;關(guān)閉字段緩存,數(shù)據(jù)表字段修改不受緩存影響;嚴(yán)格檢查文件大小寫(即使是Windows平臺),幫助你提前發(fā)現(xiàn)Linux部署問題;可以方便用于開發(fā)過程的不同階段,包括開發(fā)、測試和演示等任何需要的情況,不同的應(yīng)用模式可以配置獨(dú)立的項(xiàng)目配置文件;在開啟調(diào)試模式的狀

3、態(tài)下,我們可以給項(xiàng)目設(shè)置不同的應(yīng)用狀態(tài),并加載不同的項(xiàng)目配置文件,但是無論如何,都會首先導(dǎo)入框架默認(rèn)的調(diào)試模式配置文件,該文件位于系統(tǒng)目錄的Confdebug.php。通常情況下,調(diào)試配置文件里面可以進(jìn)行一些開發(fā)模式所需要的配置。例如,配置額外的數(shù)據(jù)庫連接用于調(diào)試,開啟日志寫入便于查找錯誤信息、開啟頁面Trace輸出更多的調(diào)試信息等等。如果沒有配置應(yīng)用狀態(tài),系統(tǒng)默認(rèn)則默認(rèn)為debug狀態(tài),也就是說默認(rèn)的配置參數(shù)是:'APP_STATUS'=>'debug',/應(yīng)用調(diào)試模式狀態(tài)復(fù)制代碼如果檢測到項(xiàng)目的配置目錄中有存在debug.php文件,則會自動加

4、載該配置文件,并且和系統(tǒng)項(xiàng)目配置文件以及系統(tǒng)調(diào)試配置文件合并,也就是說,debug.php配置文件只需要配置和項(xiàng)目配置文件以及系統(tǒng)調(diào)試配置文件不同的參數(shù)或者新增的參數(shù)。如果想在調(diào)試模式下面增加應(yīng)用狀態(tài),例如測試狀態(tài),則可以在項(xiàng)目配置文件中改變設(shè)置如下:'APP_STATUS'=>'test',/應(yīng)用調(diào)試模式狀態(tài)復(fù)制代碼這樣的話,系統(tǒng)會自動嘗試加載項(xiàng)目配置目錄下面的test.php配置文件,可以在test配置文件中改變相關(guān)設(shè)置,例如改變測試數(shù)據(jù)庫的連接信息等等。由于調(diào)試模式?jīng)]有任何緩存,因此涉及到較多的文件IO操作和模板實(shí)時編譯,所以在開啟調(diào)試模式的

5、情況下,性能會有一定的下降,但不會影響部署模式的性能。另外需要注意的是,一旦關(guān)閉調(diào)試模式,項(xiàng)目的調(diào)試配置文件即刻失效。頁面Trace調(diào)試模式并不能完全滿足我們調(diào)試的需要,有時候我們需要手動的輸出一些調(diào)試信息。除了本身可以借助一些開發(fā)工具進(jìn)行調(diào)試外,ThinkPHP還提供了一些內(nèi)置的調(diào)試工具和函數(shù)。例如,頁面Trace功能就是ThinkPHP提供給開發(fā)人員的一個用于開發(fā)調(diào)試的輔助工具??梢詫?shí)時顯示當(dāng)前頁面的操作的請求信息、運(yùn)行情況、SQL執(zhí)行、錯誤提示等,并支持自定義顯示。頁面Trace功能對調(diào)試模式和部署模式都有效,不過只能用于有頁面輸出的情況(如果你的操作沒有任何輸出,那么可能頁面Trace

6、功能對你幫助不大,你可能需要使用后面的調(diào)試方法)。但是在部署模式下面,顯示的調(diào)試信息沒有調(diào)試模式完整,通常我們建議頁面Trace配合調(diào)試模式一起使用。要開啟頁面Trace功能,需要在項(xiàng)目配置文件中設(shè)置:'SHOW_PAGE_TRACE'=>true,/顯示頁面Trace信息復(fù)制代碼該參數(shù)默認(rèn)為關(guān)閉,開啟后并且你的頁面有模板輸出的話,頁面右下角會顯示ThinkPHP的LOGO:我們看到的LOGO后面的數(shù)字就是當(dāng)前頁面的執(zhí)行時間(單位是秒)點(diǎn)擊該圖標(biāo)后,會展開詳細(xì)的頁面Trace信息,如圖:頁面Trace框架有6個選項(xiàng)卡,分別是基本、文件、流程、錯誤、SQL和調(diào)試,點(diǎn)

7、擊不同的選項(xiàng)卡會切換到不同的Trace信息窗口?;荆寒?dāng)前頁面的基本摘要信息,例如執(zhí)行時間、內(nèi)存開銷、文件加載數(shù)、查詢次數(shù)等等。文件:詳細(xì)列出當(dāng)前頁面執(zhí)行過程中加載的文件及其大小。流程:會列出當(dāng)前頁面執(zhí)行到的行為和相關(guān)流程(待完善)。錯誤:當(dāng)前頁面執(zhí)行過程中的一些錯誤信息,包括警告錯誤。SQL:當(dāng)前頁面執(zhí)行到的SQL語句信息。調(diào)試:開發(fā)人員在程序中進(jìn)行的調(diào)試輸出。頁面Trace的選項(xiàng)卡是可以定制和擴(kuò)展的,默認(rèn)的配置為:'TRACE_PAGE_TABS'=>array('base'=>'基本','file'

8、;=>'文件','think'=>'流程','error'=>'錯誤','sql'=>'SQL','debug'=>'調(diào)試')復(fù)制代碼也就是我們看到的默認(rèn)情況下顯示的選項(xiàng)卡,如果你希望增加新的選項(xiàng)卡:用戶,則可以修改配置如下:'TRACE_PAGE_TABS'=>array('base'=>'基本','

9、;file'=>'文件','think'=>'流程','error'=>'錯誤','sql'=>'SQL','debug'=>'調(diào)試','user'=>'用戶')復(fù)制代碼也可以把某幾個選項(xiàng)卡合并,例如:'TRACE_PAGE_TABS'=>array('base'=>&#

10、39;基本','file'=>'文件','think'=>'流程','error|debug|sql'=>'調(diào)試','user'=>'用戶')復(fù)制代碼我們把剛才的用戶信息調(diào)試輸出到用戶選項(xiàng)卡,trace方法的用法如下:trace($user,用戶信息',user');復(fù)制代碼第三個參數(shù)表示選項(xiàng)卡的標(biāo)識,和我們在TRACE_PAGE_TABS中配置的對應(yīng)。默認(rèn)情況下,頁面Trace窗口顯示的

11、信息是不會保存的,如果希望保存這些trace信息,我們可以配置PAGE_TRACE_SAVE參數(shù):'PAGE_TRACE_SAVE'=>true復(fù)制代碼開啟頁面trace信息保存后,每次的頁面Trace信息會以日志形式保存到項(xiàng)目的日志目錄中,命名格式是:當(dāng)前日期_trace.log,例如:12-06-21_trace.log復(fù)制代碼如果不希望保存所有的選項(xiàng)卡的信息,可以設(shè)置需要保存的選項(xiàng)卡,例如:'PAGE_TRACE_SAVE'=>array('base','file','sql');

12、復(fù)制代碼設(shè)置后只會保存base、file和sql三個選項(xiàng)卡的信息。Trace方法頁面Trace只能用于有頁面輸出的情況,但是trace方法可以用在任何情況,而且trace方法可以用于AJAX等操作。Trace方法的格式:trace('變量','標(biāo)簽','級別','是否記錄日志)例如:$info='測試信息'trace($info,'提示');復(fù)制代碼如果希望把變量調(diào)試輸出到頁面Trace的某個選項(xiàng)卡里面,可以使用:trace($info,'提示','user');復(fù)制代碼表示

13、輸由到user選項(xiàng)卡,如果沒有指定選項(xiàng)卡的話,默認(rèn)會輸出到debug選項(xiàng)卡。trace方法也可以直接拋出異常,如果是輸出到ERR選項(xiàng)卡,并且開啟'TRACE_EXCEPTION'=>true復(fù)制代碼的話,trace($info,錯誤','ERR');復(fù)制代碼會拋由異常。有三種情況下,trace方法會記錄日志:AJAX請求SHOW_PAGE_TRACE為false,也就是頁面Trace關(guān)閉的情況下trace方法的第四個參數(shù)為true在這種情況下,trace方法的第三個參數(shù)就表示記錄的日志級別,通常包括:'ERR'/一般錯誤:一

14、般性錯誤'WARN'/警告性錯誤:需要發(fā)出警告的錯誤'NOTIC'/通知:程序可以運(yùn)行但是還不夠完美的錯誤'INFO'/信息:程序輸出信息'DEBUG'/調(diào)試:調(diào)試信息'SQL'/SQL:SQL語句復(fù)制代碼變量調(diào)試輸出某個變量是開發(fā)過程中經(jīng)常會用到的調(diào)試方法,除了使用php內(nèi)置的var_dump和print_r之外,ThinkPHP框架內(nèi)置了一個對瀏覽器友好的var_dump方法,用于輸出變量的信息到瀏覽器查看。dump瀏覽器友好的變量輸出用法dump($var,$echo=true,$label=null,$st

15、rict=true)參數(shù)var(必須):要輸出的變量,支持所有變量類型echo(可選):是否直接輸由,默認(rèn)為true,如果為false則返回但不輸出label(可選):變量輸出的label標(biāo)識,默認(rèn)為空strict(可選):輸由變量類型,默認(rèn)為true,如果為false則采用print_r輸出返回值如果echo參數(shù)為false則返回要輸出的字符串使用示例: $Blog = D("Blog"); $blog = $Blog->find(3);dump($blog); 復(fù)制代碼在瀏覽器輸出的結(jié)果是: array(12)"id"=>

16、 string(1) "3" "name"=> string(0) "" "user_id"=> string(1) "0"cate_id" => string(1) "0" "title"=>string(4) "test" "content"=> string(4) "test""create_time&

17、quot;=> string(1) "0" "update_time"=> string(1) "0" "status"=> string(1) "0"read_count"=> string(1) "0""comment_count"=>string(1)"0""tags"=> string(0) ""

18、 復(fù)制代碼性能調(diào)試開發(fā)過程中,有些時候?yàn)榱藴y試性能,經(jīng)常需要調(diào)試某段代碼的運(yùn)行時間或者內(nèi)存占用開銷,系統(tǒng)提供了G方法可以很方便的獲取某個區(qū)間的運(yùn)行時間和內(nèi)存占用情況。例如:G('begin');/.其他代碼段G('end');/.也許這里還有其他代碼/進(jìn)行統(tǒng)計(jì)區(qū)間echoG('begin','end').'s'復(fù)制代碼G('begin','end')表示統(tǒng)計(jì)begin位置到end位置的執(zhí)行時間(單位是秒),begin必須是一個已經(jīng)標(biāo)記過的位置,如果這個時候end位置還沒被標(biāo)記過,則會

19、自動把當(dāng)前位置標(biāo)記為end標(biāo)簽,輸生的結(jié)果類似于:0.0056s復(fù)制代碼默認(rèn)的統(tǒng)計(jì)精度是小數(shù)點(diǎn)后4位,如果覺得這個統(tǒng)計(jì)精度不夠,還可以設(shè)置例如:G('begin','end',6).'s'復(fù)制代碼可能的輸生會變成:0.005587s復(fù)制代碼如果你的環(huán)境支持內(nèi)存占用統(tǒng)計(jì)的話,還可以使用G方法進(jìn)行區(qū)間內(nèi)存開銷統(tǒng)計(jì)(單位為kb),例如:echoG('begin','end','m').'kb'復(fù)制代碼第三個參數(shù)使用m表示進(jìn)行內(nèi)存開銷統(tǒng)計(jì),輸出的結(jié)果可能是:625kb復(fù)制代碼同樣,如果end

20、標(biāo)簽沒有被標(biāo)記的話,會自動把當(dāng)前位置先標(biāo)記位end標(biāo)簽。如果環(huán)境不支持內(nèi)存統(tǒng)計(jì),則該參數(shù)無效,仍然會進(jìn)行區(qū)間運(yùn)行時間統(tǒng)計(jì)。斷點(diǎn)調(diào)試憑借強(qiáng)大的頁面Trace信息功能支持,ThinkPHP可以支持?jǐn)帱c(diǎn)調(diào)試功能。我們只需要在不同的位置對某個變量進(jìn)行trace輸出即可,例如:$blog=D("Blog");$vo=$blog->create();trace($vo,'createvo');$vo=$blog->find();trace($vo,'findvo');復(fù)制代碼錯誤調(diào)試如果需要我們可以使用下面的方法輸出錯誤信息并中斷執(zhí)行:halt($msg)/輸出錯誤信息,并中止執(zhí)行復(fù)制代碼模型調(diào)試在模型操作中,為了更好的查明錯誤,經(jīng)常需要查看下最近使用的SQL語句,我們可以用getLastsql方法來輸出上次執(zhí)行的sql語句。例如:$User=M("User&quo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論