調試PHP程式的多種方法介紹,調試php程式
調試的定義:通過一定方法,在程式中找到並減少缺陷的數量,從而使其能正常工作。
這裡說一些如何調試PHP程式的經驗。
一、PHP內建的調試功能
1、內建的報錯功能
兩個名詞:開發環境是開發人員在進行開發和調試的環境,生產環境是最終客戶在用的線上環境;
開發環境和生產環境要分開設定報錯功能。
(1)開發環境
開發環境需要開啟報錯,以下是php.ini的配置項及其說明:
複製代碼 代碼如下:
; This directive sets the error reporting level.
; Development Value: E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
error_reporting = E_ALL | E_STRICT
; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development.
; Development Value: On
display_errors = On
這樣你在開發過程中,能第一時間發現錯誤。
即使是一個低等級的報錯“Notice: Undefined variable: a in E:\phpspace\test.php on line 14”,但一個未定義的變數的使用往往暗藏著bug。
你會問,如果我引進了開源的類庫,他們拋出一堆的低等級錯誤怎麼辦?一般代碼品質好的類庫,也沒有“Notice”層級的報錯的。所以這也是鑒別一個類庫品質的方法。
(2)生產環境
生產環境不能直接將錯誤輸出,而是記入日誌,以下是php.ini的配置項及其說明:
複製代碼 代碼如下:
; It could be very dangerous in production environments.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
display_errors = Off
; Besides displaying errors, PHP can also log errors to locations such as a
; server-specific log, STDERR, or a location specified by the error_log
; directive found below. While errors should not be displayed on productions
; servers they should still be monitored and logging is a great way to do that.
; Production Value: On
log_errors = On
; Log errors to specified file.
error_log = /path/to/php_error.log
當然日誌寫到檔案裡只是一個選擇,還有其他配置可參考手冊。
生產環境是給客戶提供服務的,你不可能在上面進行斷點、列印輸出等操作,所以日誌是不錯的選擇。
2、其他一些語言特性、功能的使用
(1)少用錯誤控制運算子“@”
其的作用是,將“@”放置在一個PHP運算式之前,該運算式可能產生的任何錯誤資訊都被忽略掉。
如果一個缺陷發生在這個運算式中,從PHP的輸出中看不到任何錯誤,這增加了調試的難度。所以能不用則不用。
(2)有些函數內建有debug功能
比如這行代碼:
複製代碼 代碼如下:
$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);
開發人員調試時已經確定,$fp為空白,串連失敗,是這一行有問題,但是為什麼串連失敗?
函數是php內建的,無法進行更深入的調試。所以一般這樣的函數(主要是網路通訊類的),會自己提供調試參數:$errno和$errstr。你可以加一句:
複製代碼 代碼如下:
if (!$fp) echo “$errstr ($errno)
\n”;
就能看到串連失敗的原因了。
這些函數有:fsockopen,pfsockopen,stream_socket_server,stream_socket_client 等。
還有些函數是調試一個功能用的,比如:mysql_errno,socket_last_error,socket_strerror 等。
這些只需要瞭解下,碰到能想到用即可。
二、引進調試工具
在遇到複雜問題時,可以藉助調試工具。比較成熟的有Xdebug、ZendDebugger。
以Xdebug為例,它能夠:控制列印輸出的樣式和數組層級、堆棧式的追蹤錯誤、追蹤函數調用、代碼執行覆蓋分析、程式的概要分析(Profiling)、遠端偵錯。詳見:http://xdebug.org/docs/。
Xdebug前兩個功能是對PHP原有的調試功能做了改進,更方便調試。
複雜的問題,調試不出來的,可能是業務上的的問題,下面也有說商務邏輯的調試。
三、調試商務邏輯錯誤
當PHP指令碼跑起來,沒有任何錯誤,只能說它沒有文法上的錯誤,但是不能說明它商務邏輯上沒錯誤。
很多商務邏輯的錯誤並不會反映在語法錯誤上,但調試的思路和PHP內建調試功能差不多。
下面是一些方法。
1、最基本的調試方法
先確定兩個東西:程式預期的結果、程式現在的不符合預期的結果;
尋找與兩種結果相關的程式碼片段;
閱讀這些程式碼片段,嘗試以“肉眼”找出錯誤;
找不出,則需要輸出一些關鍵變數,通過檢查它們的值是否正確來判斷是哪裡發生了錯誤;
若干次嘗試,最終你可以確定錯誤發生在哪個點。
你也可以藉助Xdebug等工具,查看變數值的變化,或者設定斷點進行調試。
2、記錄作業記錄
有些複雜或特殊的業務,用上面的方法不合適,比如:一個不能被打斷的後台運行指令碼。這些情況下記錄作業記錄比較合適。
記日誌的點要有所選擇,除了業務上比較重要的點,通常容易出錯的地方有:網路連接和通訊、系統許可權問題等。
3、單元測試
以代碼測試代碼,而不是像第一點一樣調試完會把測試代碼丟掉。以測試驅動開發。
這個話題比較大,但適合放這裡提一下。有興趣的同學可以去瞭解。
四、調試非功能性的錯誤
非功能性錯誤,比如:記憶體溢出導致程式掛掉了、效率有問題導致程式非常慢、死迴圈了等等。
這些問題,用“肉眼”檢查代碼效率太低了。
所以可以藉助調試工具做程式的概要分析(Profiling),從中檢查出程式的瓶頸所在。
怎調試php程式
如果沒有一定的基礎,不建議你從這類成熟的程式裡學習"資料庫語句的使用",成熟的程式通常會把功能相近的用法,功能封裝成類,進行調用的,裡面集合了各種各樣的使用方法和功能,一般沒有一定的基礎你看懂都會有些困難
php程式用什調試的
目的:配置運行PHP的環境(IIS+PHP+MYSQL+CF+Perl)支援php+cgi+asp+jsp等
作業系統:windows2000 advance server(sp3)簡體中文版
需要相關軟體:
一:php-4.3.0-Win32.zip ,到相應網站下載,我上傳檔案不方便,以下同。
二:ActivePerl-5.6.1.635-MSWin32-x86.msi ,注意,必須下載安裝檔案,就是說.msi的,不要下原代碼了,我也不會弄原代碼,加裝這個支援cgi,如果你不想支援cgi也可以不下載這個安裝
三:mysql-4.0.7-gamma-win.zip
四:MM ColdFusion MX(有沒有這個無所謂拉,我也是裝著玩的,主要是支援PHP+MYSQL)
一切都以我機子上目錄為標準,假定你機子上L:\WEB為你的網站根目錄
將php-4.3.0-Win32.zip解壓縮到L:\php目錄下
複製php目錄下php4ts.dll到winnt\system32目錄下
複製php.ini.dist到winnt目錄下,並將副檔名.dist去掉,得到php.ini檔案,用記事本開啟修改兩個參數:
1.搜尋extension_dir ,將其指向你的PHP的extensions目錄,比如我是L:\PHP\extensions,我這樣修改:
extension_dir = L:\PHP\extensions 這些等你想支援一些擴充庫的時候可以修改extension
儲存php.ini
安裝mysql:
開啟mysql-4.0.7-gamma-win.zip壓縮包
雙擊setup.exe運行程式,在安裝過程中注意選擇mysql的安裝目錄(當然,你要預設目錄也可以),比如我安裝在L:\mysql目錄下
運行L:\mysql\bin\mysqld-nt.exe ,其實一般安裝完成後系統都自動啟動服務了,如果不放心到“服務”看一下mysql是否啟動
安裝M$ Office ,不知道要不要安裝這東西才支援asp我就不知道了,反正我裝完系統後就全部安裝office了,呵呵,估計沒裝也支援asp,(如果你不想它支援asp可以不去管它)
安裝perl解譯器:
運行ActivePerl-5.6.1.635-MSWin32-x86.msi,安裝過程中選擇L:\perl目錄,當然你要預設也行。
裝MM的ColdFusion MX,我是裝到L:\ColdFusionMX目錄下了
設定管理員,嘿嘿,寫到這邊不得不開photoshop弄圖了,說不好說
點擊 開始-》程式-》管理工具-》網際網路服務管理員
點擊此串連觀看大圖
單擊“預設 web 網站”,然後按右鍵它,選擇“屬性”,開啟對話方塊
點擊此串連觀看大圖
單擊“主目錄”,做如下設定:在“本地路徑”中選擇你的機子上要作為網站根目錄的檔案夾,比如我的是L:\WEB,如:然後點擊右下方的“配置”,彈出新的對話方塊
在新的對話方塊中選擇“添加”
在可執行檔中瀏覽選擇L:\php\sapi\php4isapi.dll,注意在瀏覽對話方塊中檔案類型要選擇*.dll,不然看不到L:\php\sapi\目錄下的.dll檔案哦,選定後在副檔名中輸入.php ,如:
單擊確定
如上方法在添加L:\perl......餘下全文>>
http://www.bkjia.com/PHPjc/907282.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/907282.htmlTechArticle調試PHP程式的多種方法介紹,調試php程式 調試的定義:通過一定方法,在程式中找到並減少缺陷的數量,從而使其能正常工作。 這裡說一...