2013-02-28 45 views
7

我的任務是在不同的評估階段(dev/test/staging/etc)設置各種環境的網站。如何調試永不完成加載的PHP腳本?

但是,在我們的臨時環境中,似乎有一些區別阻止了PHP腳本的完成,因此該頁面從未傳送到瀏覽器。

我想知道是否有一種方法可以輸出記錄切割連接時的某種堆棧跟蹤或回溯,還是有其他一些方法來查明PHP在任何給定點處做了什麼腳本的生命週期?

這是一個Drupal站點,因此它涉及到很多我不熟悉的代碼,並且可能需要花費數小時才能在整個程序中使用die;命令來查看腳本加載到的位置。

我知道我應該看看環境的差異,但是所有應該有非常相似的配置(Ubuntu 11.04),並且臨時環境似乎完全樂意爲其他PHP站點服務,而這個特定的站點拒絕完成。如果有什麼這個暫存站點有更多的資源可用,其他沒有問題的環境。

UPDATE:對不起,最後發現問題。暫存環境位於不允許通過公共IP訪問自己的VLAN上,無論出於何種原因(仍然困惑於此),它都試圖作爲頁面加載的一部分進行訪問,並且從未完成請求。爲127.0.0.1設置主機文件條目解決了問題。

+1

你看過xdebug嗎? – 2013-02-28 10:34:33

+1

是一個分步調試器的選項嗎? http://xdebug.org/docs/remote – 2013-02-28 10:35:10

+0

如果你想使用'die()',那麼我傾向於採用的方法與猜測1到1000的數字時使用的方法相同。首先開始一半(500),然後如果它沒有達到那個點,那麼這個點必須在之前,並且你再一次(250)等。 – h2ooooooo 2013-02-28 11:07:23

回答

3

使用像xDebug這樣的工具逐步調試這樣的問題是一個選項,但可能需要很長時間 - 找到將斷點放在哪裏的程度與解決問題的程度大致相同圍繞代碼放置die聲明的位置。調試器選項是一種更好的方法,但如果遇到類似這樣的問題時,您可能會遇到大量未知代碼處存在未知阻止程序的問題,但不會節省太多。

但是xDebug也有一個profiler工具,它可以告訴你在程序運行期間調用了哪些函數,它們花了多長時間,並突出顯示了瓶頸所在。這可能是一個更好的開始。只需配置xDebug以生成一個分析器跟蹤,然後使用kCacheGrind在圖形環境中查看跟蹤。

如果你的程序陷入了一個循環或者某個具體需要花費很長時間才能完成的事情,這個問題幾乎可以直接找出問題所在;您將能夠清楚地看到哪個功能需要花費時間,以及調用鏈看起來如何。

這很有可能,一旦你看到了,你就可以通過查看相關的代碼來找到問題。但是,如果你不能,那麼你可以使用xDebug的直通調試器來分析運行時的函數,並查看變量設置爲了解它爲什麼會循環。

的XDebug可以在這裏找到:

+0

尼斯全面的答案。即使我不再需要,或者有時間來完成它的步伐,我將在下一次不可避免的時候指出這一點:)謝謝! – DanH 2013-02-28 15:58:40

2

使用Xdebug的。

它很容易安裝和使用。 它有一個像斷點和分步幾個選項完成加載

之前跟蹤的PHP腳本的狀態,你可以從這裏

步步爲建立XDebug的一步tutoril是availble的在sachithsays.blogspot.com/

下載的XDebug