亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

調試PHP程序的多種方法介紹

2024-05-04 23:26:57
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了調試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)<br />/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),從中檢查出程序的瓶頸所在。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产成人在线播放| 国产美女直播视频一区| 欧美激情a在线| 欧美激情乱人伦一区| 午夜精品在线观看| 日韩在线高清视频| 国产精品香蕉国产| 国产精品jizz在线观看麻豆| 精品久久久久久久久久久久久久| 欧美韩国理论所午夜片917电影| 日韩在线视频导航| 成人免费网站在线观看| 日韩中文字幕在线观看| 亚洲国产一区自拍| 91成人天堂久久成人| 国内精品模特av私拍在线观看| 97久久精品人人澡人人爽缅北| 国产欧美日韩91| 国产免费一区二区三区在线观看| 国产欧美日韩亚洲精品| 亚洲伦理中文字幕| 一区二区欧美亚洲| www.日韩av.com| 国产一区二区三区三区在线观看| 国产欧美一区二区三区在线看| 国产在线98福利播放视频| 欲色天天网综合久久| 日韩电影在线观看中文字幕| 欧美激情视频在线免费观看 欧美视频免费一| 日韩av在线看| 欧美性猛交xxxx富婆弯腰| 久久精品国产综合| 国产999精品久久久| 日韩精品中文在线观看| 亚洲精品99久久久久| 亚洲自拍偷拍一区| 亚洲天堂av女优| 91免费在线视频| 精品露脸国产偷人在视频| 久久精品国产电影| 亚洲一区二区在线播放| 久久人人爽人人爽爽久久| 国产精品日韩精品| 国产精品视频男人的天堂| 欧美一区三区三区高中清蜜桃| 国产一区二区三区毛片| 久久婷婷国产麻豆91天堂| 亚洲精美色品网站| 在线精品国产成人综合| 国产在线不卡精品| 欧洲美女7788成人免费视频| 日本精品视频网站| 国产噜噜噜噜噜久久久久久久久| 一区二区国产精品视频| 浅井舞香一区二区| 中文字幕欧美在线| 中文字幕日韩在线观看| 亚洲va男人天堂| 992tv成人免费影院| 亚洲精品二三区| 精品国产依人香蕉在线精品| 亚洲欧美一区二区三区久久| 亚洲九九九在线观看| 成人性生交xxxxx网站| 久久久久久久爱| 久久99视频精品| 国产成人综合亚洲| 久久亚洲国产精品成人av秋霞| 久久综合电影一区| 国外视频精品毛片| 久久久国产精品免费| 欧美在线观看网站| 亚洲国产日韩欧美在线图片| 欧美巨猛xxxx猛交黑人97人| 久久人人爽人人爽人人片亚洲| 91精品国产综合久久香蕉的用户体验| 久久免费高清视频| 欧美猛交ⅹxxx乱大交视频| 成人h猎奇视频网站| 国产精品午夜国产小视频| 日产精品99久久久久久| 亚洲综合在线播放| 韩日精品中文字幕| 91丝袜美腿美女视频网站| 色噜噜狠狠狠综合曰曰曰88av| 亚洲视频国产视频| 久久久亚洲国产天美传媒修理工| 亚洲国产精彩中文乱码av| 国产精品久久久亚洲| 色婷婷亚洲mv天堂mv在影片| 国产日韩精品视频| 爱福利视频一区| 久久久精品免费视频| 国产又爽又黄的激情精品视频| 成人亚洲综合色就1024| 精品国产网站地址| 亚洲综合色激情五月| 亚洲男人天堂2019| 亚洲欧美日韩中文在线制服| 91中文在线视频| 亚洲图片欧洲图片av| 久久久精品视频成人| 日韩精品免费一线在线观看| 亚洲精品98久久久久久中文字幕| 久久综合国产精品台湾中文娱乐网| 久久综合免费视频影院| 久久久久久这里只有精品| 久久国内精品一国内精品| 国产精品中文字幕在线| 欧美一乱一性一交一视频| 欧美国产精品日韩| 精品国产乱码久久久久久天美| 国产精品成人v| 欧美精品videos性欧美| 成人xxxx视频| 中文字幕精品一区久久久久| 日韩欧美在线免费| 日韩成人免费视频| 欧美性猛交xxxx乱大交蜜桃| 欧美最顶级丰满的aⅴ艳星| 日韩亚洲欧美中文在线| 91免费的视频在线播放| 亚洲欧美日韩天堂一区二区| 欧美电影免费在线观看| 日本精品久久久| 91tv亚洲精品香蕉国产一区7ujn| 亚洲一区二区三区香蕉| 亚洲美女激情视频| 欧美日韩中文字幕在线| 91久久综合亚洲鲁鲁五月天| 日韩av中文字幕在线| 精品无人国产偷自产在线| 国产精品视频男人的天堂| 日本精品在线视频| 伊人久久免费视频| 亚洲另类图片色| 国产精品扒开腿爽爽爽视频| 欧美大片免费看| 国内精品一区二区三区四区| 欧美激情视频一区| 91精品综合久久久久久五月天| 久久成人精品视频| 欧美日本高清一区| 亚洲一区二区黄| 黑人巨大精品欧美一区免费视频| 成人有码在线视频| 欧美性xxxxx极品娇小| 国产日韩欧美视频在线| 国产精品视频精品| 欧美国产亚洲精品久久久8v| 欧美尤物巨大精品爽| 亚洲色无码播放| 久久久中文字幕| 国产精品久久国产精品99gif| 91九色在线视频| 欧美另类极品videosbest最新版本| 日日摸夜夜添一区| 国产精品久久久久久久久男| 日韩美女免费线视频| 日韩在线观看免费高清完整版| 日韩精品视频免费| 中文字幕亚洲情99在线| 亚洲尤物视频网| 亚洲国产精品va在看黑人|