2009-08-14 14 views
0

我的問題是基於this article在Ubuntu調試PHP時使用Xdebug2的性能分析數據

如何通過Xdubug2製作關於PHP代碼的分析數據,然後將其放入應用程序(如KCacheGrind)?

我在Ubuntu中成功使用了Xdebug,因爲它在瀏覽器中突出顯示了我的錯誤消息。但是,我還沒有找到像xdebug這樣的終端工具。

我想有我的PHP代碼這樣

alt text

+1

瞭解他們的圖片似乎沒有得到轉移過來。如果您可以重新發布可能有幫助的圖片。 – 2009-08-19 19:47:55

+0

我是參考文章的作者。該圖像被鏈接到我的服務器,我已配置Apache不允許。 因此,我已經將圖像上傳到imgur.com,在那裏可以容忍甚至鼓勵盜鏈。 – pilif 2009-08-28 08:25:49

回答

4

此行添加到你的php.ini

xdebug.profiler_enable = 1

然後,如果你碰巧經過,你需要重新啓動Web服務器Web服務器運行PHP,否則的conf變化不挑向上。

如果您通過cli運行PHP,那麼當然不需要重新啓動。

現在,當您運行PHP腳本時,會在xdebug.profiler_output_dir php.ini設置指定的目錄中創建cachegrind.out.PID文件。它默認是/ tmp。

該文件是kcachegrind能夠加載的文件之一。

還有其他的手段來調用這個文件產生,你可以在http://www.xdebug.org/docs/all_settings#profiler_enable

1

我遇到類似的情況,我只有訪問到終端,而不是在其上進行測試的視覺環境。更糟糕的是,我使用的是Windows機器和Putty。

提供的解決方案是

  1. 安裝WebGrind(http://code.google.com/p/webgrind/
  2. 運行的Xdebug和cachegrind.out文件複製到那裏你有cachegrind觀衆的機器。

對我來說,答案是SCP把cachegrind文件放到本地windows機器上,然後用WinCachegrind來查看它們。你可以將它們SCP到你的Linux機器上,並在這些文件上運行KCacheGrind。這個缺點是,你可能沒有相同的文件結構,所以你將無法查看源代碼。如果您的本地計算機上也有源代碼,或者可以在此獲得源代碼,那麼也可以修復此問題。在vim(或其他編輯器)中打開cachegrind文件,然後執行全局搜索並替換路徑,以將它們更改爲本地計算機上的正確源路徑。

我希望這是你正在尋找的。

編輯到地址評論:

如果你正在得到callgrind文件有所不同。爲此,您需要在Linux中運行(我認爲您是這樣)並且可以使用callgrind和valgrind程序。這裏假設的最後一件事是,您將Apache作爲Apache mod運行,而不是以其他方式運行。針對apache的啓動使用callgrind工具,然後在瀏覽器中運行請求。這不僅會給你詳細的信息,而且還會給你提供有關Apache調用樹中的許多信息,這些信息可能會造成麻煩。

這裏的

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/httpd -X 

一個例子,-X將開始在調試模式下的Apache只有一個線程。從這裏打開一個Web瀏覽器,並打你想要的PHP腳本。然後回去關閉apache。這也應該結束callgrind解析。

如果您不需要Apache或Web瀏覽器,你可以嘗試只用PHP命令

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/php my_php_script.php 

這應該給你相同的結果,但沒有所有的東西阿帕奇運行callgrind。

+0

我得到了WebGrind的工作。 PHP是一種不需要編譯的語言。 **如果你不想使用'gcc -pg',那麼你如何創建一個PHP腳本的callgrind.out文件?** – 2009-08-19 12:40:44

+1

如果你想獲得一個callgrind而不是一個不同的cachegrind。回覆修改意見。 – 2009-08-19 19:38:42

+1

Masi,Callgrind是valgrind的選項。對困惑感到抱歉。在我的機器上,callgrind安裝使「callgrind」作爲一個只是「valgrind --tool = callgrind」別名的命令可用。試試這個sudo valgrind --tool = callgrind --dump-instr = yes --trace -jump = yes -v/usr/sbin/php my_php_script.php – 2009-08-23 04:28:54