博客原文連接php
在使用php調試代碼的時候,我一般都是使用簡單暴力的echo
之類的輸出調試。這種調試方法的效率與我的能力正相關,你加一個echo
多數是爲了驗證本身的一個推測,那麼你對代碼越熟悉,你推測的就會越準確,bug解決的就越快,相反則每每如無頭蒼蠅般,東一頭西一頭,不知所謂地輸出一些無心義的調試信息,效率奇低。此時單步調試工具便成了救命稻草,有了它,你能夠查看代碼執行過程當中全部變量的值,心如明鏡,解個bug還不手到擒來。對於php,經常使用的就是xdebug,我這裏就簡單講下IDEA
裏面如何使用xdebug
進行代碼調試。瀏覽器
咱們先把xdebug安裝好,因爲這裏是遠程調試,因此xdebug要安裝到php運行的服務器上,若是php是在本地環境中,那就直接安裝到本地,官方安裝文檔在這裏,我這裏簡單講一下Centos 6.6
+PHP 5.4
的安裝方法。服務器
下載而且編譯xdebug。
下載連接-xdebug-2.2.7.tgz架構
wget http://xdebug.org/files/xdebug-2.2.7.tgz
tar zxvf xdebug-2.2.7.tgz
cd xdebug-2.2.7
phpize&make&make installapp
修改php配置框架
在php.ini中增長以下一行:
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.soeclipse
安裝完畢!ide
在實際使用前,咱們來簡單瞭解xdebug遠程調試的原理,這樣當xdebug不聽話的時候,咱們也知道從哪裏收拾它。詳細文檔參見此處。工具
xdebug遠程調試分爲兩部分:調試客戶端和xdebug服務端。前者就是運行咱們代碼調試器的地方,我這裏是IDEA
,後者是xdebug
運行的地方。當咱們嘗試使用xdebug進行調試時,客戶端會監聽一個端口,等待xdebug來鏈接,一旦鏈接成功,雙方就開始通訊,進行代碼調試。優化
圖一,源圖
圖一動態展現了xdebug運行的原理,左邊是調試客戶端,好比IDEA
、eclipse
之類的IDE,右邊是xdebug
,運行按照以下步驟進行:
IDE
監聽一個調試端口,默認是9000
,能夠自行配置。
用戶訪問右邊php環境的server,咱們這裏使用瀏覽器訪問,通常IDE
會自動幫咱們在正常的url後面增長XDEBUG_SESSION_START=name
的參數。這個參數是用來通知xdebug
主動鏈接IDE
的9000
端口進行調試的,沒有這個參數,xdebug不會去主動鏈接IDE
,調試也就不會觸發。
xdebug
主動去鏈接IDE
的9000
端口, 鏈接成功後,調試開始。
細心的同窗可能會問,xdebug
是如何知道IDE
監聽9000
端口的呢?好問題,答案就在配置文件裏面。xdebug
有兩個配置:remote_host
和remote_port
,分別表明IDE
的ip地址和監聽端口。因而可知,IDE
和xdebug
必須協商好監聽端口。
另外一個問題又來了,端口好辦,可是若是個人ip會變化,那我換一個ip,豈不是要修改下xdebug.remote_host
配置嗎?好麻煩!!!不知道ip不要緊,xdebug
能夠本身知道,只要設置xdebug.remote_connect_back
爲1就能夠了,其運行原理見圖二,實現很簡單,xdebug
能夠從http請求的頭部獲取ip地址,以後就用該ip地址做爲remote_host
來鏈接。
圖二,源圖
到這裏,相信你們已經基本瞭解xdebug
的原理了,本着好記性不如爛筆頭
的準則,這裏把個人配置列一下,方便查閱。
[xdebug] zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so xdebug.remote_connect_back=1 xdebug.remote_enable=1 xdebug.remote_port=9444 xdebug.remote_autostart=1 xdebug.profiler_enable=1 xdebug.profiler_output_dir="/home/logs/xdebug/xdebug-profiler"
沒講到的配置,你們自行查閱文檔,太懶會變成豬的!!!
最後一步就是IDEA
,也即IDE
的配置了。主要有兩方面要配置:
其一,監聽端口配置,對於IDEA
系列,能夠在配置中搜索Debug
或者xdebug
就能迅速定位了,圖三是個人配置。
圖三
其二,是本地開發路徑和遠程路徑的映射配置,也就是要讓本地代碼和遠程代碼能夠對應起來。配置位置在項目的Run/Debug Configuration
裏面,也就是去新建一個調試項目,截圖以下。
圖四
圖五
按照圖五中配置好mapping關係後,開始使用xdebug
的調試功能吧,告別簡單粗暴甚至低效的echo
輸出調試吧!
使用echo
輸出調試,不少時候是由於開發者懶,懶得集成調試工具,懶得去優化本身的開發環境。碰到小bug使用echo
還行,一旦遇到詭異bug或者複雜的框架,牢牢靠echo
已然無能爲力。固然,單步調試的另外一個好處是可讓初學者快速掌握項目的架構和執行流程。
書山有路勤爲徑,學海無涯苦做舟!!!