2011-10-27 26 views
4

所以基本上我使用Zend Framework的自動加載器來自動加載我的函數。但因爲這一點,每當我調試時,如果我調用任何函數,xdebug會在去調用實際函數之前去自動加載函數。xdebug在調試時跳過某些函數

所以,如果我調用該函數func(),它會先去autoload()然後func()這增加了調試費用在時間方面,等

理想的情況下,如果我叫FUNC(),它應該直接去FUNC( ),同時仍然使用自動加載器。

當我正在調試時,是否有辦法指定xdebug(或使用任何PHP/Zend hack等)來跳過某個函數(在這種情況下是我的自動加載函數)?

+0

「去自動加載功能」是什麼意思? xdebug如何「去」呢? – deceze

+1

調試器進入自動加載功能 –

+0

是的,因爲這就是您的程序所做的。它可能會更煩人地隱藏它,然後在那裏有一個bug。我不太明白這是如何顯着增加「調試成本」... – deceze

回答

1

如果你單步執行代碼,那麼你真的應該考慮使用斷點。如果您在調查的代碼塊的開頭設置斷點,則可以使用「運行到斷點」選項跳過在調查代碼之前運行的所有代碼。

如果您在要調查的類的構造函數的開始處設置斷點,或者如果您確定對象實例化沒問題,那麼您想調查的方法的開始位置,則可以跳過自動加載器。

Netbeans和Eclipse PDT都支持簡單地通過點擊要調查的代碼的行號來設置斷點。

另外,調試器中還有「跳出」選項,可以跳出使用「跳入」選項跳轉到的功能/方法。如果您發現自己在自動加載器中,只需走出它。

+1

如果您退出自動加載器,典型的結果是,不是發送到函數完成後發送的函數。 斷點可能很有用,但它們有一個問題。如果你希望只在特定的條件下調試一個函數,那麼在它不加註意的情況下,將斷點放入它就會導致它被擊中。所以如果它是一個運行很多的函數,你將不得不繼續10-30次才能到達你真正關心的部分。 條件斷點可能有效,但不被遺憾地支持。 – srcspider

+0

確實沒有XDebug的條件斷點,但要解決這個問題並不難。只要做'if(condition){do_some_kind_of_noop_here(); }'並把斷點放在noop – GordonM

6

與偏好PDT日食: PHP - >調試 - >階段的過濾 點擊添加過濾器,我加了Autoloader.inc再也不用去通過它

step_filtering_preferences爲更直觀的說明

+0

這應該是正確的答案。 –