日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

php程序調(diào)試方法總結(jié)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP將整個(gè)網(wǎng)站生成HTML靜態(tài)
其實(shí)實(shí)現(xiàn)的方法很簡單。 php;?php //在你的開始處加入 ob_start(); ob_start(); //以下是你的代碼 //在結(jié)尾加入 ob_end_clean(),并把本頁輸出到一個(gè)變量中 $temp = ob_get_contents(); ob_end_clean(); //寫入文件 $fp = fopen(文件名,'w); fwrite($fp,$temp) or die(

   相信很多朋友們都有調(diào)試程序的經(jīng)歷,然而很多時(shí)候調(diào)試程序是痛苦而又漫長的過程;它不僅需要細(xì)心,更需要耐心,切忌心浮氣躁。但是當(dāng)找出問題并順利解決它時(shí),又會(huì)給人無比激動(dòng)的喜悅。這里總結(jié)一下筆者在程序調(diào)試中的使用的原則,工具,以及方法。這里需要說明的是,某些原則性的東西,各種語言都是差不多的,而涉及到具體的工具和某些具體的調(diào)試方法,這里只涉及web開發(fā)方面的內(nèi)容。

  總體原則:

  1.找出問題原因:

  程序需要調(diào)試,是因?yàn)槌绦蛴袉栴}。而調(diào)試的第一目標(biāo)是找到原因。常見調(diào)試方法, 排除法: 當(dāng)我們面對(duì)整個(gè)復(fù)雜的系統(tǒng)時(shí),常常完全不知道問題出在什么地方;這個(gè)時(shí)候可以先將與問題不相關(guān)的地方排排除,逐漸縮小調(diào)試范圍。獨(dú)立模塊法: 大部分程序都有模塊結(jié)構(gòu),將可疑模塊單獨(dú)拿出來,模擬輸入相應(yīng)的操作數(shù)據(jù),看是否出現(xiàn)問題。比較法:如果程序或系統(tǒng)是基于某個(gè)平臺(tái)時(shí),可以先看看其他基于本平臺(tái)的程序或系統(tǒng),找出是平臺(tái)問題還是本程序問題,很多時(shí)候這種方法是用來排除不成熟平臺(tái)上的隱藏問題。對(duì)比法:對(duì)于自己實(shí)現(xiàn)的程序,可能已經(jīng)有相應(yīng)的開源的模塊,可以把這些程序源碼找出來,和自己的程序進(jìn)行對(duì)比,這樣不僅節(jié)省時(shí)間,還能借鑒別人的優(yōu)秀之處。

  2.問題定位:

  問題原因的多種多樣,可能這個(gè)時(shí)候你只能知道是什么樣的問題, 可能與什么相關(guān), 這個(gè)時(shí)候就需將出現(xiàn)的代碼段找出來。而需要做到這一步,一般開發(fā)環(huán)境為我們提供很多實(shí)用工具,借助這些工具,可以一步一步地查看程序的輸入和輸出,根據(jù)每一步的輸入輸出,定位問題。

  有一部分很厲害的人,可以通過閱讀代碼,找到出現(xiàn)問題的地方。但是很多問題都是調(diào)試者自己因?yàn)槭韬鲈斐傻�,而要通過這樣方式去查找問題,幾乎是不可能的,因?yàn)橐呀?jīng)形成固定的思維定勢。

  3.解決問題

  找到問題的原因和相應(yīng)代碼行,解決它很多時(shí)候是一件比較簡單的事,因?yàn)檫@些問題往往自己疏忽或者自己考慮不周。但是某些時(shí)候并不總是這樣的,而是由于外部環(huán)境造成的,比如你的網(wǎng)站訪問的人數(shù)增多,你當(dāng)初沒有考慮到這些數(shù)據(jù)壓力,同時(shí)也沒有考慮到高度并發(fā)性的問題,這個(gè)時(shí)候問題解決起來是你覺得比較棘手。而要解決這樣的問題,不僅僅要專注程序, 更要從系統(tǒng)架構(gòu)方面著手,綜合各方面的知識(shí),進(jìn)行全面的考慮。

  web開發(fā)常用調(diào)試工具

  俗話說:工欲善其石,必先利其器。對(duì)于程序的調(diào)試,也必須借助外部工具。這里介紹幾種在開發(fā)web程序中常常用到的工具:

  xdebug, xhprof:php性能調(diào)試工具。他們都是php的一種擴(kuò)展,可以很方便的安裝和配置。這兩個(gè)工具主要是將你程序的內(nèi)部運(yùn)行狀況,調(diào)用函數(shù)以一種簡潔的方式告訴你。讓你對(duì)程序在什么地方占用過多的資源,那些地方需要進(jìn)行優(yōu)化一目了然。 順便提一下,xdebug生成的profile文件一般借助winCacheGrid查看。

  firephp, firbug: 前者主要是php的調(diào)試工具,而后者是web開發(fā)必不可少的工具, 它不僅能查看請(qǐng)求,還能調(diào)試js,css。

  在ie下面可以使用HttpWatch。如果需要將數(shù)據(jù)做深入分析,可以使用抓包工具。

  php中常使用的調(diào)試函數(shù):error_report, var_dump, print_r, var_export

  mysql,apache/nginx的常用的調(diào)試技巧:分析他們?nèi)罩疚募彩窍喈?dāng)重要。在linux下查看日志文件的常用命令: cat, more, less, grep, awk, sed

  常見的調(diào)試技巧和方法

  下面以我調(diào)試的程序來介紹一下具體的調(diào)試方法和技巧。

  例子1: 這是一個(gè)php開發(fā)的游戲引擎,主要功能提供雙發(fā)球員移動(dòng)位置,狀態(tài),傳球,技能等功能控制,整個(gè)程序通過xml文件保存結(jié)果。突然某天,有兩個(gè)用戶進(jìn)行比賽,返回的xml不符合正常的結(jié)構(gòu)。從返回的結(jié)果來看,球員的移動(dòng)位置有些不正常,其中少了某些步驟,于是決定從游戲的AI入手查找,但是也沒有發(fā)現(xiàn)此處有什么異常。最后將輸入的球員數(shù)據(jù)打印出來,然后將中間產(chǎn)生的數(shù)據(jù)也打印出來,結(jié)合程序的處理邏輯,發(fā)現(xiàn)是這兩個(gè)用戶有同一個(gè)球員,因此導(dǎo)致在處理的時(shí)候, 兩個(gè)人的球員出現(xiàn)混亂。找到原因后,就將這個(gè)以球員標(biāo)識(shí)改為以球隊(duì)和球員共同決定即可。

  例子2:程序剛上線, 有些熱心的朋友們喜歡對(duì)程序進(jìn)行一些壓力測試。某次突然20w的請(qǐng)求很大的一個(gè)靜態(tài)資源,直接導(dǎo)致硬盤癱瘓。對(duì)于這種情況,必須查看訪問日志,才知道發(fā)生什么事。否則人家對(duì)你攻擊了, 你還找不到原因。當(dāng)然對(duì)于這樣的攻擊,直接把靜態(tài)資源放到cdn上。另外,隨著訪問用戶量的增大,系統(tǒng)的壓力增大, 反應(yīng)逐漸變慢,我們不得不考慮:以前只需要0.000幾毫秒能處理的程序,現(xiàn)在需要0.幾秒。這個(gè)時(shí)候程序的并發(fā)性設(shè)計(jì)就很重要了。否則會(huì)造成數(shù)據(jù)異常的情況。

  例子3:使用外部軟件出現(xiàn)異常:例如使用memcached的時(shí)候,如果某臺(tái)沒有啟動(dòng)或者不能使用了。這個(gè)時(shí)候nginx一般就會(huì)對(duì)某些使用memcache的請(qǐng)求返回502,是不是感覺有點(diǎn)無厘頭,可以考慮改寫memcahce 的php擴(kuò)展了

分享:怎樣不成為偽PHP程序員
成為一名優(yōu)秀的PHP程序員,該如何做呢?應(yīng)該具有什么樣的技能,才算得上PHP程序員?你的技術(shù)又是在什么水平級(jí)別上?本文將列出一些作為一名PHP程序員應(yīng)該了解的事情。 MySQL能力 在開發(fā)上的應(yīng)用基于幾個(gè)能力體現(xiàn): (1)了解:知道用PHP連接數(shù)據(jù)庫;懂得寫一些簡單的SQL;建一

來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2013-05-03
相關(guān)PHP教程