準備工作
要在適用於 PHP 的 NetBeans IDE 中成功調試 PHP 應用程式,您需要為進行 PHP 開發安裝並配置 PHP 引擎、Apache 本地 Web 服務器和 XDebug 調試器。
啟用 XDebug
安裝 XDebug 後,您必須在 PHP 引擎中啟用它。
啟用 XDebug:
- 找到 PHP 引擎所使用的 php.ini 檔案。如果運行 phpinfo(),此檔案將顯示在第一個表中的 "Loaded Configuration File"(已裝入的設定檔)表頭下。
- 在裝入的 php.ini 中取消注釋或添加以下行:
zend_extension_ts="<path to the php folder>/php_xdebug-2.0.2-5.2.5.dll"xdebug.remote_enable=1xdebug.remote_host=127.0.0.1xdebug.remote_port=9000xdebug.remote_handler=dbgp
有關如何配置 XDebug 的詳細資料,請單擊此處。
注意:請確保您指定的路徑與安裝過程中所確定的相應檔案的位置匹配。
- 如果使用 XAMPP 包,則需要禁用 Zend 最佳化器,因為它會阻止 XDebug。找到相關行,然後刪除它們或將其標記為注釋。
- /xampplite/php/php.ini
- /xampplite/apache/bin/php.in
注意:如果使用 XAMPP Lite,則需要對以下兩個 php.ini 檔案進行上述更改:
如何使用 XDebug 進行 PHP 調試
如果在 php.ini 檔案中啟用了 XDebug,XDebug 便可以隨時暫停和恢複 PHP 程式執行。當程式執行暫停時,XDebug 可以檢索有關當前程式狀態的資訊,例如讀取程式變數的值。實際上,此過程可以用下列工作流程來表示:
- 使用者在 PHP 原始碼執行應該暫停行上設定一個斷點。
- 當到達此行時,使用者按 F7 和 F8 鍵逐行執行指令碼,並檢查變數的值。
調試器視窗
啟動偵錯工作階段時,將在主編輯器視窗下開啟一組調試器視窗。要添加新視窗,請選擇“視窗”>“調試”。可以使用下列視窗:
- “局部變數”視窗,顯示已初始化的變數及其類型和值的列表。
- “監視”視窗,顯示使用者定義的運算式及其值的列表。
- “調用棧”視窗,按倒序顯示被調用函數的列表。最後調用的函數將顯示在列表頂部。
- “斷點”視窗,顯示設定了斷點的行所在的檔案以及行號的列表。
- “會話”視窗,顯示當前活動偵錯工作階段的列表。
- “線程”視窗
- “源”視窗
- “HTTP 用戶端監視器”視窗
偵錯工作階段
以下過程是典型偵錯工作階段的工作流程。
運行偵錯工作階段:
- 啟動 IDE,運行項目,然後開啟包含要調試的原始碼的檔案。
- 將游標置於某一行上,您希望在該行之前自動執行 PHP 指令碼。
- 要設定斷點,請按 Ctrl-F8 按鍵組合或選擇“調試”>“開啟/關閉行斷點”。
- 在“項目”視窗中,導航至當前項目節點,單擊滑鼠右鍵,然後從彈出式菜單中選擇“調試”。IDE 將開啟調試器視窗並在調試器中運行該項目,直至到達斷點為止。
注意:如果當前項目設定為主專案,則可以選擇“調試”>“調試主專案”,按 Ctrl-F5 按鍵組合或單擊 。
- 切換至“局部變數”視窗。該視窗顯示當前函數中已初始化的所有變數及其類型和值。
- 要查看該函數外部的變數值,請將游標置於此變數出現的某個位置上。工具提示會顯示變數值。
- 要逐行(包括所有被調用函數中的行)執行程式,請按 F7 鍵或選擇“調試”>“步入”,然後在“局部變數”視窗中監視這些變數值的更改。
- 要通過監視運算式的更改來檢查程式邏輯,請定義一個新監視:
- 要開啟“監視”視窗,請選擇“視窗”>“調試”>“監視”,或按 Ctrl-Shift-2 按鍵組合。將開啟“監視”視窗。
- 在“監視”視窗中的任意位置單擊滑鼠右鍵,然後從彈出式菜單中選擇“建立監視”。將開啟“建立監視”視窗。
- 輸入監視運算式,然後單擊“確定”。
現在,您便可以在調試過程中進行其他檢查。
- 要取消對某個函數中代碼的逐行執行操作並跳至該函數調用後的下一行,請按 Ctrl-F7 按鍵組合或選擇“調試”>“步出”。
- 要跳過對某個函數中代碼的逐行執行操作,擷取該函數返回的值,並跳至該函數調用後的下一行,請按 F8 鍵或選擇“調試”>“步過”。
- 要暫停偵錯工作階段,請選擇“調試”>“暫停”。
- 要繼續偵錯工作階段,請選擇“調試”>“繼續”或按 。
- 要取消偵錯工作階段,請按 。
在程式結束時,調試器視窗會關閉。
範例偵錯工作階段
此部分說明了一個標準的偵錯工作階段。
- 使用以下參數建立新的 PHP 項目:
- 項目類型 - PHP 應用程式
- 源位置 - htdocs 檔案夾的預設位置
- 回合組態 - 本地 Web 網站
有關設定 PHP 項目的更多詳細資料,請參見設定 PHP 項目文檔。
- 在項目建立完成後,將游標置於“源檔案”節點上,從彈出式菜單中選擇“屬性”,然後開啟“調試”視窗。選中“調試伺服器端 PHP”複選框。
- 要在會話過程中使用熱鍵,請將游標置於項目節點上,然後從彈出式菜單中選擇“設定為主專案”。
- 在 index.php 檔案中,輸入以下代碼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>NetBeans PHP debugging sample</title></head><body><?php $m=5; $n=10; $sum_of_factorials = calculate_sum_of_factorials ($m, $n); echo "The sum of factorials of the entered integers is " . $sum_of_factorials; function calculate_sum_of_factorials ($argument1, $argument2) { $factorial1 = calculate_factorial ($argument1); $factorial2 = calculate_factorial ($argument2); $result = calculate_sum ($factorial1, $factorial2); return $result; } function calculate_factorial ($argument) { $factorial_result = 1; for ($i=1; $i<=$argument; $i++) { $factorial_result = $factorial_result*$i; } return $factorial_result; } function calculate_sum ($argument1, $argument2) { return $argument1 + $argument2; }?> </body></html>
該程式碼封裝含三個函數:
- calculate_factorial () 函數
- calcualte_sum () 函數
- calculate_sum_of_factorials () 函數,該函數調用 calculate_factorial () 函數兩次,再調用 calcualte_sum () 函數一次,然後返回計算的階乘和。
- 在 PHP 塊的開頭設定一個斷點 (Ctrl-F8):
<?php
- 要啟動調試,請單擊 。調試器將在斷點處停止。
- 按 F7 鍵三次。調試器將在調用函數 calculate_sum_of_factorials () 的行上停止。“局部變數”視窗會顯示變數 $m 和 $n 以及它們的值:
- 要步入函數 calculate_sum_of_factorials (),請按 F7 鍵。調試器開始執行函數 calculate_sum_of_factorials () 中的代碼,然後在函數calculate_factorial () 的調用處停止。
現在,“局部變數”視窗將顯示函數 calculate_sum_of_factorials () 中聲明的局部變數 $argument1 和 $argument2。
- 按 F7 鍵。調試器開始執行函數 calculate_factorial () 中的代碼。“調用棧”視窗將按倒序顯示函數的調用棧,最後調用的函數位於列表頂部:
- 按 F7 鍵步入迴圈。可在“局部變數”視窗中查看變數值。
- 如果您確定代碼運行正常,請按 Ctrl-F7 按鍵組合取消函數執行。程式將在調用函數 calculate_factorial () 後返回至下一行。
注意:您也可以按 F7 鍵,直到程式執行完函數 calculate_factorial () 為止。您也會在調用該函數後返回至下一行。
- 由於您剛檢查了函數 calculate_factorial (),並且確定其運行正常,因此可以跳過對該函數的再次執行操作(“步過”)。要步過該函數,請按 F8 鍵。程式將在函數calculate_sum () 的調用處停止。
- 要步入函數 calculate_sum (),請按 F7 鍵。
- 要步過該函數,請按 F8 鍵。對於任何一種情況,調試器都會在函數 calculate_sum_of_factorials () 的最後一行停止。
- 按 F7 鍵。調試器將移到 echo 語句所在的行上。
- 按 F7 鍵,直到調試器退出程式為止。將開啟瀏覽器視窗並顯示程式執行的結果:
使用其他監視
可以定義其他監視運算式來跟蹤程式的執行。這有助於捕獲錯誤。
- 按如下所示更新代碼(將加號替換為減號):
function calculate_sum ($argument1, $argument2) { return $argument1 - argument2; }
假定運算子的改變是由於拼字錯誤造成的,而實際上您需要計算和。
- 選擇“調試”>“建立監視”或按 Ctrl-Shift-F6 按鍵組合。將開啟“建立監視”視窗。
- 輸入以下運算式,然後單擊“確定”。
$factorial1+$factorial2
“監視”視窗中將顯示新運算式。
- 運行偵錯工作階段。當調試器在以下行停止時
return $result;
將“監視”視窗中運算式的值與“局部變數”視窗中 $result 的值進行比較。它們應該相同,但在此樣本中不同。
此樣本非常簡單,它為您提供了使用監視的一些基本概念。
PHP 和 HTML 混合用例
您可以調試同時包含 PHP 塊和 HTML 塊的代碼。在範例偵錯工作階段部分的樣本中,對值進行了固定編碼。現在,將通過用於輸入值的 HTML 輸入表單來擴充該代碼。
- 在 <?php ?> 塊的上方添加以下 HTML 程式碼:
<form action="index.php" method="POST"> Enter the first integer, please:
<input type="text" name="first_integer"/><br/>
Enter the second integer, please:
<input type="text" name="second_integer"/><br/>
<input type="submit" name="enter" value="Enter"/>
</form>
有關詳細資料,請參見 HTML 輸入表單。
- 將 <?php ?> 塊頂部的以下行:
$m=5; $n=10; $sum_of_factorials = calculate_sum_of_factorials ($m, $n); echo "The sum of factorials of the entered integers is " . $sum_of_factorials;
替換為以下代碼:
if (array_key_exists ("first_integer", $_POST) &&
array_key_exists ("second_integer", $_POST)) {$result = calculate_sum_of_factorials ($_POST["first_integer"], $_POST["second_integer"]);
echo "Sum of factorials is " . $sum_of_factorials;
}
- 在 <?php ?> 塊的開頭設定一個斷點,然後啟動偵錯工作階段。
- 按 F7 鍵。調試器將步入程式。同時,會開啟瀏覽器視窗,但不顯示輸入表單。這是調試器的正確行為,因為它必須首先通過 Web 頁的整個原始碼,然後才能顯示該頁面。實際上,這意味著調試器通過了兩次代碼。第一次是調試器處理代碼以顯示 HTML 輸入表單。第二次是調試器逐步執行 PHP 代碼。
- 按 F7 鍵,直到調試器到達程式末尾並且開啟輸入表單為止。
- 填寫該表單,然後單擊 Enter 鍵。將繼續偵錯工作階段(如範例偵錯工作階段部分中所述)。