熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php程序調試方法總結

2013-11-15 12:36:46  來源: PHP編程 

  相信很多朋友們都有調試程序的經歷然而很多時候調試程序是痛苦而又漫長的過程;它不僅需要細心更需要耐心切忌心浮氣躁但是當找出問題並順利解決它時又會給人無比激動的喜悅這裡總結一下筆者在程序調試中的使用的原則工具以及方法這裡需要說明的是某些原則性的東西各種語言都是差不多的而涉及到具體的工具和某些具體的調試方法這裡只涉及web開發方面的內容

  總體原則

  找出問題原因

  程序需要調試是因為程序有問題而調試的第一目標是找到原因常見調試方法 排除法: 當我們面對整個復雜的系統時常常完全不知道問題出在什麼地方;這個時候可以先將與問題不相關的地方排排除逐漸縮小調試范圍獨立模塊法: 大部分程序都有模塊結構將可疑模塊單獨拿出來模擬輸入相應的操作數據看是否出現問題比較法如果程序或系統是基於某個平台時可以先看看其他基於本平台的程序或系統找出是平台問題還是本程序問題很多時候這種方法是用來排除不成熟平台上的隱藏問題對比法對於自己實現的程序可能已經有相應的開源的模塊可以把這些程序源碼找出來和自己的程序進行對比這樣不僅節省時間還能借鑒別人的優秀之處

  問題定位

  問題原因的多種多樣可能這個時候你只能知道是什麼樣的問題 可能與什麼相關 這個時候就需將出現的代碼段找出來而需要做到這一步一般開發環境為我們提供很多實用工具借助這些工具可以一步一步地查看程序的輸入和輸出根據每一步的輸入輸出定位問題

  有一部分很厲害的人可以通過閱讀代碼找到出現問題的地方但是很多問題都是調試者自己因為疏忽造成的而要通過這樣方式去查找問題幾乎是不可能的因為已經形成固定的思維定勢

  解決問題

  找到問題的原因和相應代碼行解決它很多時候是一件比較簡單的事因為這些問題往往自己疏忽或者自己考慮不周但是某些時候並不總是這樣的而是由於外部環境造成的比如你的網站訪問的人數增多你當初沒有考慮到這些數據壓力同時也沒有考慮到高度並發性的問題這個時候問題解決起來是你覺得比較棘手而要解決這樣的問題不僅僅要專注程序 更要從系統架構方面著手綜合各方面的知識進行全面的考慮

  web開發常用調試工具

  俗話說工欲善其石必先利其器對於程序的調試也必須借助外部工具這裡介紹幾種在開發web程序中常常用到的工具

  xdebug xhprofphp性能調試工具他們都是php的一種擴展可以很方便的安裝和配置這兩個工具主要是將你程序的內部運行狀況調用函數以一種簡潔的方式告訴你讓你對程序在什麼地方占用過多的資源那些地方需要進行優化一目了然 順便提一下xdebug生成的profile文件一般借助winCacheGrid查看

  firephp firbug 前者主要是php的調試工具而後者是web開發必不可少的工具 它不僅能查看請求還能調試jscss

  在ie下面可以使用HttpWatch如果需要將數據做深入分析可以使用抓包工具

  php中常使用的調試函數error_report var_dump print_r var_export

  mysqlapache/nginx的常用的調試技巧分析他們日志文件也是相當重要在linux下查看日志文件的常用命令 cat more less grep awk sed

  

  常見的調試技巧和方法

  下面以我調試的程序來介紹一下具體的調試方法和技巧

  例子 這是一個php開發的游戲引擎主要功能提供雙發球員移動位置狀態傳球技能等功能控制整個程序通過xml文件保存結果突然某天有兩個用戶進行比賽返回的xml不符合正常的結構從返回的結果來看球員的移動位置有些不正常其中少了某些步驟於是決定從游戲的AI入手查找但是也沒有發現此處有什麼異常最後將輸入的球員數據打印出來然後將中間產生的數據也打印出來結合程序的處理邏輯發現是這兩個用戶有同一個球員因此導致在處理的時候 兩個人的球員出現混亂找到原因後就將這個以球員標識改為以球隊和球員共同決定即可

  例子程序剛上線 有些熱心的朋友們喜歡對程序進行一些壓力測試某次突然w的請求很大的一個靜態資源直接導致硬盤癱瘓對於這種情況必須查看訪問日志才知道發生什麼事否則人家對你攻擊了 你還找不到原因當然對於這樣的攻擊直接把靜態資源放到cdn上另外隨著訪問用戶量的增大系統的壓力增大 反應逐漸變慢我們不得不考慮以前只需要幾毫秒能處理的程序現在需要幾秒這個時候程序的並發性設計就很重要了否則會造成數據異常的情況

  例子使用外部軟件出現異常例如使用memcached的時候如果某台沒有啟動或者不能使用了這個時候nginx一般就會對某些使用memcache的請求返回是不是感覺有點無厘頭可以考慮改寫memcahce 的php擴展了


From:http://tw.wingwit.com/Article/program/PHP/201311/21278.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.