標籤:
PHP程式的debug,無論是cli方式還是web方式,都需要使用第三方的debug工具。PHP5.6之前,本身內建的debug功能,僅限於日誌輸出。
推薦使用免費xdebug。Xdebug作為zend擴充存在。可以在php安裝後,通過phpize單獨被編譯安裝。
xdebug的安裝有幾點注意
- 如果不知道下載什麼xdebug版本,可以在這裡,通過上傳phpinfo資訊,由系統給出建議:http://xdebug.org/wizard.php
- 安裝後,php.ini中需要指定的xdebug.so方式,可能因為php版本不同而不同。詳情見此:http://xdebug.org/docs/all#configure-php
- make install如果安裝不成功,可以去modules檔案夾下,手動拷貝xdebug.so到1中建議的檔案夾下
xdebug的使用有幾點注意
- 如果需要設定斷點和單步跟蹤,可以使用xdebug內建的debugclient。位於debugclient檔案夾下。安裝方法:http://xdebug.org/docs/all#debugclient
- xdebug的代碼跟蹤,都是通過remote debug來完成;debugclient其實是起了一個server用於監聽並等待需要debug的請求;所有的斷點設定都是通過debugclient去進行的。詳細的控制命令,可以參考:http://xdebug.org/docs-dbgp.php
- PHP採用debugclient作為server,而不是類似Java的remote debug方式。其原因在於一方面PHP代碼不是類似Java編譯執行可以直接看到源碼,另一方面debugclient可以根據會話設定,來區分對哪些請求才需要進行debug和單步追蹤。這對多並發的web應用是非常有意義的(當然java也可以通過設定條件斷點來實現)。參考:http://xdebug.org/docs/all#activate_debugger
- 對於cli的php程式進行debug時,需要設定XDEBUG_CONFIG。可以參考:http://stackoverflow.com/questions/13284795/setting-xdebug-breakpoints-solely-in-command-line
關於gdb進行PHP程式的debug,主要用於對zend engine本身、PHP源碼和擴充的debug。這也是為什麼php源碼中內建gdb指令碼.gdbinit的原因。
PHP程式z中xdebug工具簡要使用方法