1. 程式人生 > >Zend Studio中如何配置和使用xdebug斷點除錯工具?

Zend Studio中如何配置和使用xdebug斷點除錯工具?

斷點除錯,也叫單步除錯,是指程式開發中,為了找到程式的bug,通常採用的一種除錯手段,一步一步自動跟蹤程式執行的流程,根據變數的值,找到錯誤的原因。 很多整合的開發工具(IDE),如Zend Studio、PhpStorm等,都支援斷點除錯,在需要除錯的程式碼行設定斷點(Breakpoints),然後按預設的快捷鍵步進。
1. 安裝PHP的xdebug擴充套件 如果你使用的xampp,無需手動下載php_xdebug.dll擴充套件檔案,因為xampp中的php的擴充套件目錄ext中,已經包含了該擴充套件檔案。只是php.ini配置檔案中,預設沒有開啟xdebug而已。為此,我們需要將其開啟,程式碼如下: [XDebug] zend_extension = "E:\xampp\php\ext\php_xdebug.dll" xdebug.profiler_append = 0 xdebug.profiler_enable = 1 xdebug.profiler_enable_trigger = 0 xdebug.profiler_output_dir = "E:\xampp\tmp" xdebug.profiler_output_name = "cachegrind.out.%t-%s" xdebug.remote_enable = 0 xdebug.remote_handler = "dbgp" xdebug.remote_host = "127.0.0.1" xdebug.trace_output_dir = "E:\xampp\tmp" 如果你是單獨安裝的PHP,那麼就需要到 xdebug 官網(
http://xdebug.org/download.php
)下載和PHP版本對應的xdebug擴充套件,要注意xdebug擴充套件所適用的PHP版本號、TS(執行緒安全)版還是NTS(非執行緒安全)版,以及VC6版本還是VC9版本,這些都應該和安裝的PHP對應,否則可能出現問題。 下載和PHP對應的xdebug擴充套件後,將php_xdebug.dll擴充套件檔案放到php的ext擴充套件目錄下。然後,和上面類似,修改php.ini配置檔案,開啟xdebug。 修改完php.ini配置檔案後,重啟Apache,列印phpinfo資訊,檢視xdebug是否開啟成功。 2. 配置Zend Studio
首先,修改Zend Studio首選項,即點選選單欄的Window -> Preferences,新增一個 PHP Executables(PHP可執行環境),並將其設為預設(Set Default)。

其次,新增PHP Servers(由於我設定了虛擬主機 demo.com,故這裡我需要新建一個),並將其設為預設,即點選Set Default按鈕。

然後,配置Debug選項,如下圖:
最後,設定專案的屬性配置,選中專案資料夾後右鍵,選擇 Properties,彈出一個對話方塊,設定如下:
到此,Zend Studio中關於xdebug的配置就完成了。以後,我們就可以使用 Debug As -> PHP CLI Application 或 PHP Web Application 進行斷點除錯了。 3. 執行斷點除錯
首先,在指定的PHP檔案的行首,新增多個斷點,可通過雙擊行首或右鍵選單 -> Toggle Breakpoints,來設定或取消斷點。

由於在上面的配置中,我們勾選了 Break at First Line 選項,因此這裡也可不加斷點,直接進行除錯。當我們進行除錯時,Zend Studio會自動在php檔案的第一行程式碼處進入斷點除錯模式。 其次,在該php檔案中,右鍵 -> Debug As -> PHP CLI Application,執行Debug除錯模式,如下圖:
進入斷點除錯模式後,就可以通過快捷鍵來對該php檔案進行除錯了。 常用的除錯快捷鍵包括:F5(單步跳入)、F6(單步跳過)、F7(單步返回)、F8(跳過除錯繼續執行)、Ctrl+F2(結束除錯)。 當然,我們也可以使用快捷選單中的按鈕來控制除錯過程。 如上圖所示,通過單步除錯(斷點除錯),我們可以在右上角的 Variables 選項卡區域,看到單步除錯過程中各個變數的值。顯然,這種查錯的方式比在程式碼中手動新增多個輸出語句要快捷得多。特別是程式碼邏輯比較複雜時,單步除錯的優勢更加明顯。 單步跳入和單步跳過的區別: 步入比步過更加精細,如果在除錯過程中使用步入,xdebug就會真正一條語句一條語句的順序執行,遇到載入的外部檔案時,也會進入其中。這樣,對整個程式的執行流程就能非常清楚,但同時也會使整個debug流程變得冗長。 步過是指跳過當前程式碼,執行下一行程式碼,不會考慮程式碼的內部執行細節;而步入是指進入當前程式碼內部,逐條執行每一條指令。如果只想知道程式的大致流程,應該使用步過,來跳過細節,避免花費過多不必要的時間。而當程式遇到一些很難排除的bug時,需要精確地知道每條指令的執行細節,此時可選擇步入。