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

首頁 > 網站 > 幫助中心 > 正文

php怎么調試?調試PHP程序的多種方法介紹

2024-07-09 22:39:18
字體:
來源:轉載
供稿:網友

調試的定義:通過一定方法,在程序中找到并減少缺陷的數量,從而使其能正常工作,這里說一些如何調試PHP程序的經驗。

一、PHP自帶的調試功能

1、自帶的報錯功能

兩個名詞:開發環境是開發人員在進行開發和調試的環境,生產環境是最終客戶在用的線上環境;

開發環境和生產環境要分開設置報錯功能。

(1)開發環境

開發環境需要打開報錯,以下是php.ini的配置項及其說明:

  1. ; This directive sets the error reporting level. 
  2. ; Development Value: E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) 
  3. error_reporting = E_ALL | E_STRICT 
  4.  
  5. ; This directive controls whether or not and where PHP will output errors, 
  6. ; notices and warnings too. Error output is very useful during development. 
  7. ; Development Value: On 
  8. display_errors = On 

這樣你在開發過程中,能第一時間發現錯誤。

即使是一個低等級的報錯“Notice: Undefined variable: a in E:/phpspace/test.php on line 14”,但一個未定義的變量的使用往往暗藏著bug。

你會問,如果我引進了開源的類庫,他們拋出一堆的低等級錯誤怎么辦?一般代碼質量好的類庫,也沒有“Notice”級別的報錯的。所以這也是鑒別一個類庫質量的方法。

(2)生產環境

生產環境不能直接將錯誤輸出,而是記入日志,以下是php.ini的配置項及其說明:

  1. ; It could be very dangerous in production environments. 
  2. ; It's recommended that errors be logged on production servers rather than 
  3. ; having the errors sent to STDOUT. 
  4. display_errors = Off 
  5.  
  6. ; Besides displaying errors, PHP can also log errors to locations such as a 
  7. ; server-specific log, STDERR, or a location specified by the error_log 
  8. ; directive found below. While errors should not be displayed on productions 
  9. ; servers they should still be monitored and logging is a great way to do that. 
  10. ; Production Value: On 
  11. log_errors = On 
  12.  
  13. ; Log errors to specified file. 
  14. error_log = /path/to/php_error.log 

當然日志寫到文件里只是一個選擇,還有其他配置可參考手冊。

生產環境是給客戶提供服務的,你不可能在上面進行斷點、打印輸出等操作,所以日志是不錯的選擇。

2、其他一些語言特性、功能的使用

(1)少用錯誤控制運算符“@”

其的作用是,將“@”放置在一個PHP表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉。

如果一個缺陷發生在這個表達式中,從PHP的輸出中看不到任何錯誤,這增加了調試的難度。所以能不用則不用。

(2)有些函數自帶有debug功能

比如這行代碼:

$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);

開發者調試時已經確定,$fp為空,連接失敗,是這一行有問題,但是為什么連接失?。?/p>

函數是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),從中檢查出程序的瓶頸所在。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩动漫免费观看电视剧高清| 在线激情影院一区| 国产精品96久久久久久| 成人两性免费视频| 国产日韩欧美视频在线| 亚洲精品久久久一区二区三区| 性欧美亚洲xxxx乳在线观看| 欧美成人免费网| 亚洲精品国产精品自产a区红杏吧| 精品在线欧美视频| 国产精品久久综合av爱欲tv| 欧美黑人巨大xxx极品| 97婷婷涩涩精品一区| 色哟哟入口国产精品| 国产成人综合久久| 91亚洲一区精品| 国产综合色香蕉精品| 97视频在线免费观看| 国产精品久久久久久亚洲影视| 久久精品视频va| 久久国产精品影视| 精品久久久91| 欧美一级成年大片在线观看| 91在线精品播放| 亚洲第一视频网| 亚洲国产高潮在线观看| 日韩美女视频免费看| 亚洲欧美日韩精品久久奇米色影视| 成人日韩av在线| 国产一区视频在线播放| 亚洲欧美成人一区二区在线电影| 最近2019好看的中文字幕免费| 亚洲男人的天堂网站| 久久视频国产精品免费视频在线| 欧美成人高清视频| 国产在线高清精品| 久久免费视频这里只有精品| 久久久精品久久| 亚洲高清免费观看高清完整版| 日韩不卡在线观看| 久久综合免费视频| 欧美日韩国产在线播放| 热久久免费视频精品| 久久色在线播放| 自拍偷拍亚洲欧美| 欧美亚洲日本网站| 疯狂做受xxxx高潮欧美日本| 久久中文字幕一区| 红桃av永久久久| 国产精品福利在线观看| 国产成人激情小视频| 亚洲精品成人久久| 一级做a爰片久久毛片美女图片| 久久在线免费观看视频| 久热精品在线视频| 国产精品欧美久久久| 2019中文字幕全在线观看| 欧美日韩成人精品| 久久久午夜视频| 国产精品一区=区| 丝袜美腿亚洲一区二区| 亚洲欧洲美洲在线综合| 国产亚洲精品久久久久久| 亚洲天堂av综合网| 久久噜噜噜精品国产亚洲综合| 国产亚洲精品久久久久久牛牛| 亚洲人成亚洲人成在线观看| 国产日韩在线看片| 91国内揄拍国内精品对白| 国产精品专区第二| 这里只有视频精品| 国产一区二区三区在线视频| 亚洲2020天天堂在线观看| 亚洲国产另类 国产精品国产免费| 亚洲国语精品自产拍在线观看| 日韩一区二区三区xxxx| 亚洲深夜福利网站| 亚洲国产精品成人av| 欧美麻豆久久久久久中文| 91成人天堂久久成人| 91在线观看欧美日韩| 91手机视频在线观看| 亚洲天堂男人的天堂| 最近2019年手机中文字幕| 亚洲va国产va天堂va久久| 久久亚洲综合国产精品99麻豆精品福利| 亚洲精品免费网站| 国产精品9999| 欧美极品少妇xxxxⅹ免费视频| 久精品免费视频| 亚洲一级一级97网| 国产精品高潮呻吟久久av黑人| 欧美日韩国产第一页| 69久久夜色精品国产69乱青草| 欧美精品一区在线播放| 黑丝美女久久久| 欧美午夜视频一区二区| 久久视频国产精品免费视频在线| 国产精品久久视频| **欧美日韩vr在线| 亚洲欧洲免费视频| 亚洲精品视频免费| 久久激情视频久久| 久久免费成人精品视频| 日韩美女av在线| 日韩中文字幕国产精品| 中文字幕日韩在线视频| 久久久av一区| 欧美日韩一区二区在线播放| 中文字幕在线国产精品| 欧美中文字幕在线观看| 亚洲国产第一页| 久久久久国产视频| 一本大道香蕉久在线播放29| 欧美一级高清免费播放| 亚洲的天堂在线中文字幕| 亚洲国产黄色片| 国产剧情日韩欧美| 国产欧美一区二区三区视频| 91九色国产在线| 91av在线免费观看视频| 中文字幕亚洲二区| 国产91网红主播在线观看| 成人午夜在线影院| 最近中文字幕mv在线一区二区三区四区| 欧美在线视频一区二区| 91久久久久久| 国产精品免费观看在线| 国产视频精品免费播放| 国产在线观看不卡| 久久久爽爽爽美女图片| 亚洲美女在线看| 国产日韩欧美一二三区| 欧美亚洲在线播放| 成人午夜一级二级三级| 中文字幕欧美精品日韩中文字幕| 亚洲欧洲午夜一线一品| 国产精品入口免费视频一| 欧美国产日韩xxxxx| 97激碰免费视频| 国产综合香蕉五月婷在线| 国产精品爽爽爽| 国产一区二区日韩| 久久久人成影片一区二区三区观看| 欧美成人中文字幕| 亚洲精品美女久久久| 国产亚洲精品美女| 精品亚洲aⅴ在线观看| 久久精品欧美视频| 国产精品日日摸夜夜添夜夜av| 亚洲美女在线看| 日韩在线观看电影| 精品人伦一区二区三区蜜桃免费| 国产精品日本精品| 亚洲香蕉成人av网站在线观看| 91豆花精品一区| 亚洲精品在线91| 久久亚洲精品视频| 久久av中文字幕| 亚洲精品中文字幕av| 国产在线精品播放| 久久久精品中文字幕| 国产日韩欧美中文在线播放| 欧美xxxx做受欧美.88|