1. 程式人生 > >最新最詳細最簡潔Eclipse除錯PHP配置詳解(Xdebug,Zend Debugger)

最新最詳細最簡潔Eclipse除錯PHP配置詳解(Xdebug,Zend Debugger)

轉自:http://lspvic.tk/2011/05/27/php-debug-config-in-eclipse-zend-xdebug/

搬家注:該日誌寫於2011 年 04 月 07 日,Eclipse,PHP等版本號很多,更新也比較快,請注意文章中的版本。本文不一定幫您解決問題,但能給您一些解決問題的思路及一些概念。

最近開始做SRTP專案WebOS,於是又開始了PHP之旅。搭建PHP環境又用了一兩天,一個字,煩。遇到了很多問題,從Apache+php+mysql的配置到 Eclipse+PHP+XDebug(Zend Debbuger也同時配置了)的開發環境搭建,各種Google,各種教程貼,各種問題帖,各種矛盾的說法,雖然大部分人都按自己說的解決了問題,但是同一個問題解答方法各異,弄得我也是一頭霧水,突然覺得這大部分時間都在為Google新增利潤點選廣告罷了。

搜尋了很多,也解決了不少問題,得到了很多感悟,不知從哪個說去,一點點來吧。關於配置Apache+php+mysql,我將在另一篇日誌中說說我的經驗。

先說說我的各種版本,搜尋引擎最大浪費就在與很多很過時的東西,很多都在說Eclipse3.2,3.4,php5.1等等,於是各種悲劇,感覺和小白鼠像極了。

  • 作業系統:Win7 Ultimate

  • Eclipse:Eclipse for PHP Developers(Version: Helios Release,Build id: 20100617-1415)這裡說一下,Pdt我沒配,但是Debug外掛的配置和eclipse關係不太大。

  • PHP:php5.2.17 TS(thread safety)vc6(剛從

    官網下的)官網上分兩種版本5.3.6的vc9版本和5.2.17的vc6版本,vc9是在IIS下用的,而vc6是在apache下用的(左邊有說明),每個版本又分為thread safe和non thread safe的(和下面的debug外掛配置有關),一般推薦下載thread safe。

  • XDebug 2.1.1(官網)版本很多,不過有個連結可以幫你選擇。(主要三個方面TS or not,vc6 or vc9, 32 bits or 64 bits). 我選擇PHP 5.2 VC6 TS (32 bit) .

  • Zend Debugger: 這個最麻煩,需要註冊才能下載,它在推廣Zend Studio。外掛名叫Studio Web Debugger,windows版本名字叫

    ZendDebugger-20100729-cygwin_nt-i386.zip,裡面有各種版本的debugger,一定要注意5_x_x_和nts(這個是non thread safety),TS的要用5_2_x_comp(和Xdebug反了過來)。另外把dummy.php拷到根文件下(http://localhost:8081/dummy.php)為了在Eclipse中測試成功與否。

弄好各種版本之後,就開始配置了,就是一個php.ini的配置。

這裡先說下Eclipse中除錯的兩種方式: Debug as PHP script 和 Debug as PHP web page。

Debug as PHP script是直接呼叫php.exe解釋的,不用開apache也能除錯(事實上和apache無關)。但是缺陷也很大,不能在瀏覽器中開啟網頁,也沒辦法得到cookie,post等的值,即$COOKIE, $REQUEST等(可以再命令列引數中舍,但是很不方便,也不好用)。

Debug as PHP web page其實就是一種特殊的遠端除錯,可以在瀏覽器中開啟網頁,然後執行,可以動態的得到cookie等值,我就是用這種模式除錯的,不過既然是 Remote debugging,就要在配置中開起來,否則這種除錯設了斷點也不起作用。下面配置會說到。

好了,Xdebug的配置

[xDebug] ;這一行沒有也沒關係 
zend_extension_ts = “C:\Program Files\PHP\ext\php_xdebug-2.1.1-5.2-vc6.dll” ;注意ts指的是thread safety,此版本的一定要有。最好寫上檔案的整個路徑,相對路徑問題很大,很可能出問題。

xdebug.remote_enable = On ;其實官網上的配置沒有給這一句,如果不配置這項,那麼就沒辦法使用Debug as PHP web page了,所以還是開了。

網上有很多項,我只配置了這兩項也照常使用,因為我不知道網上說的其他項的意思,我就沒配。當然,一可以去查官方文件,第二在phpinfo裡面xdebug下每一配置項都列出來了,你想配哪項配哪項。

配置成功的標誌,檢視phpinfo,能看到下面兩項xdebug

看有Xdeugxdebug2

配置項挺多的,慢慢去研究吧

Zend debugger配置,php.ini中

[zend debugger] 
zend_extension_ts = “C:\Program Files\PHP\ext\ZendDebugger.dll”;同樣注意ts和完整的路徑。 
zend_debugger.allow_hosts=127.0.0.1,192,168.0.4;允許除錯的主機IP, 
zend_debugger.expose_remotely=always;就是遠端除錯,debug as php web page就要用這個

同樣我也配置了上面三項就正常使用了。

配置成功的標誌,檢視phpinfo。zendzend2

有這個就配置成功啦。

Eclipse的配置還沒說呢,其實到這如果懂了Debug as php script和debug as php web page的原理Eclipse的配置也就很簡單了,無非是在Eclipse選項-》php-》debug裡面配置一下就好了,有php executables(php.exe),php servers注意埠(如http://localhost:8081),兩個debug外掛的埠(預設一個9000一個10000)就不要亂改了。另外,如果配置了Zend Debugger,注意把前面的dummy.php拷過去才能點選test Debbuger成功哦。下面在php檔案上點選斷點,在檔案上右擊Debug as 就可以開始了,對就這麼簡單。

總結一下配置的整個過程中容易出錯的地方:

  • 版本的對應關係要對,如php和debug外掛的版本一致。
  • 一定要注意ts(thread safe)和nts(none thread safe),有時候標註的是ts,另一個版本不標註;有時候標註的是nts,而ts就不標註。
  • 注意官方文件堅決的說明,Apache下一定要用php vc6版本的。
  • 兩個外掛中的zend_extension_ts中最好寫上完整路徑,相對路徑這東西和環境變數有關,問題很大。
  • 配置debug外掛成功與否與Eclipse無關,建議先配置能夠在phpinfo中成功了再去在Eclipse中設定。
  • 莫名其妙的錯誤怎麼辦,最好的辦法是檢視apache錯誤日誌:在 apache安裝目錄下的logs/eroror.log檔案中有詳細記錄,這個我將它稱作解決問題的終極大殺器,看了它,你一定明白了在哪區找錯誤,該搜尋哪些問題。比如出現了failed loading extention “ext\ZendDebugger.dll” ,你是不是想到了apache沒有找到這個dll檔案或者我是不是搞錯了dll檔案是ts還是nts呢。這個解決辦法我會在另一篇關於apache+php+mysql的文章中詳細介紹。

題外話:開源軟體的配置固然是繁,版本固然多,版本更新也快,軟體的使用上就必然有點不得心應手了,尤其是各種軟體組合在一起問題那就更多了。那麼怎麼解決這些問題呢,我們一般的做法是有那個問題搜尋那個問題,看了一個個解決方案,一個個教程,而忽視了最根本的東西,官方文件,看了文件,你才能知其然,知其所以然。我在上面樂此不疲的提到,官方文件怎麼說怎麼說,就是因為我在一次次的像小白鼠一樣試驗著網上的各種教程的時候,最終還是官方文件幫我解決了各種問題,各種疑惑。想想現在,就是出了問題我也不怕,並且認為,一步一步像這樣配置下來怎麼會出問題呢。所以迴歸原點,才是我們解決問題的根本之所在。

注:既然我在標題中寫了最新最詳細最簡潔的字眼,但是我的表述不一定準卻,考慮也並非周全。之所以這樣,是想和大家一起討論,大家有什麼問題都可以留言,我們一起來解決,讓它最新最詳細也最簡潔,讓更多的後來人少走點彎路。