2012-03-18 28 views
3

我想讓我的Mac上的xdebug工作。我正在使用內置版本的Apache(2.2.1)和PHP(5.3.8)的OS 10.6。我跟着Xdebug的網站,基本上由這些步驟對 「tailored installation instructions」:OS X上的xdebug部分工作(例如,在終端但不是瀏覽器中打印堆棧跟蹤)。

  1. 構建Xdebug的(版本2.1.3)從源
  2. 移動xdebug.so/usr/lib/php/extensions/no-debug-non-zts-20090626
  3. 添加爲php.ini: zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
  4. 重新啓動網絡服務器。

從我的理解,應該是這樣。我知道大多數人使用像PHPEclipse這樣的IDE來使用xdebug,但是聽起來並不是這樣,只是爲了在頁面上獲得調試輸出。許多舊的指令都涉及安裝MAMP,但看起來不再需要。

跡象Xdebug的工作:當我運行php -mphpinfo()我得到了XDebug預期的信息。在腳本中,我可以調用xdebug_is_enabled()(返回1)和xdebug_get_function_stack()(返回堆棧)等函數。

方法xdebug不工作:我安裝xdebug的主要原因是在發生錯誤時得到堆棧跟蹤,這種情況沒有發生。根據this documentation page,我應該得到一個堆棧跟蹤,只要display_errors在php.ini中設置爲On,(它就是這樣)。我試過了應該引發警告的代碼(例如,echo(hello))以及產生致命錯誤的代碼(例如,當$ x不是對象時爲$x->awesomefunction())。兩者都不會產生任何xdebug輸出,致命錯誤只會導致頁面無聲無息地死去。我鏈接到的文檔中給出的測試代碼也不會產生任何結果。

更新:事實證明,如果我從終端運行帶有致命錯誤的腳本,我確實從xdebug獲得堆棧跟蹤。然而,它仍然沒有顯示出來,當我從瀏覽器中運行的腳本

此外,定期錯誤報告現在分成:以前,我會通過包括命令得到錯誤輸出:

ini_set("display_errors","1"); 
ERROR_REPORTING(E_ALL); 

現在,將這些行放入我的腳本中也不會產生任何錯誤報告。 (在瀏覽器中,當我從終端運行腳本時確實會顯示錯誤。)

那麼,這裏有什麼問題?我有沒有離開xcode安裝的東西?我的系統中有其他地方掛着的設置,是否可以抑制錯誤?我嘗試了所有我能想到的,但我很樂意測試你的想法。

+1

您是否試過在控制檯而不是瀏覽器中運行測試來查找錯誤? – 2012-03-18 10:33:57

+0

有趣!當我運行一個從控制檯產生致命錯誤的腳本時,我確實從xdebug獲得了一個堆棧跟蹤,但是當我在瀏覽器中運行它時,我仍然沒有。我會更新我的問題... – octern 2012-03-18 10:45:40

+0

您是否考慮過使用預編譯的LIIP PHP包?它們包含了xDebug,我發現它們非常易於使用和配置。 http://php-osx.liip.ch/ – GordonM 2012-03-18 10:52:15

回答

0

經過幾個小時的顛簸後,我發現其中一個測試文件實際上包含另一個將display_errors設置爲0的文件。另一個測試文件與xdebug網站相距甚遠,但我認爲當時我正在使用它,我介紹了一些其他配置錯誤,阻止它正常工作。我真的很尷尬!讓這成爲今天的調試過程中系統,可重複測試的重要性的課程。在光明的一面,xdebug現在像桃子一樣工作。

總之,該工作的一系列步驟是:從源

  1. 構建Xdebug的(版本2.1.3)
  2. 移動xdebug.so到/ usr/lib中/ PHP /分機/ NO調試非ZTS-20090626
  3. 添加到php.ini中:zend_extension的= /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
  4. 添加爲php.ini: display_errors = On
  5. 重新啓動網絡服務器。
0

如果它在控制檯而不是瀏覽器上工作,它可能是一個xdebug配置問題。

我不是Mac用戶,但在Ubuntu上有兩個不同的php.ini文件,一個用於控制檯,一個用於Apache。如果Mac也是這種情況,您可以檢查是否啓用了xdebug並在兩個php.ini文件中正確設置。

你也可以檢查guide中提到的xdebug設置。

+0

Apache絕對使用我編輯的相同的php.ini文件。例如,我可以在腳本中使用函數xdebug_is_enabled()。如果我在php.ini中註釋掉加載xdebug擴展的行,那麼該函數在瀏覽器和終端中都會導致嚴重錯誤。 – octern 2012-03-18 12:10:14