開發者測試除錯工具Xdebug安裝及整合使用教程

開發者測試除錯工具Xdebug安裝及整合使用教程

正如任何一個開發者可以證明的那樣,程式碼在初稿之後永遠不可能為生產做好準備。開發過程中的一個關鍵部分是除錯–刪除或改變程式碼中所有不工作的部分。

PHP的Xdebug擴充套件是一種流行的方法,可以根除並摧毀你程式碼中的所有bug。

Xdebug的一個偉大方面是它的靈活性。無論你喜歡哪種框架或開發環境,你都能找到適合你工作流程的Xdebug版本。從這裡開始,掌握這個工具不會花很長時間。

本教程將深入研究Xdebug,包括安裝過程、將其整合到你的設定中,以及一般使用方法。

首先,讓我們給你更多關於Xdebug是什麼和它做什麼的背景。

  1. Xdebug介紹
  2. 為什麼要使用Xdebug?
  3. 如何開啟PHP錯誤日誌
  4. 如何使用Xdebug
  5. 結合PhpStorm使用Xdebug
  6. 命令小貼士

Xdebug介紹

Xdebug是最流行的除錯PHP程式碼的擴充套件之一。你將在你選擇的環境中安裝它,它充當一個 “步驟偵錯程式”。

Xdebug的核心是步進式偵錯程式,它與整合開發環境緊密結合,可以非常簡單地在PHP程式碼中設定斷點,以深入瞭解程式碼在執行時的情況。

Xdebug是一個PHP擴充套件,必須和PHP一起安裝和編譯。幸運的是,很多本地開發工具使安裝和執行Xdebug變得簡單。

xdebug

Xdebug logo

簡而言之,這使你能夠逐行處理你的程式碼,這樣你就可以逐步檢視程式碼在你的程式中是如何行動和互動的,以及調查其輸出。從那裡,你可以根據你的需要進行修改。

不過,Xdebug可以做得更多。

  • 你可以使用一套指標和視覺化的方法來分析你的程式碼的效能。
  • 當你執行PHP單元測試時,你可以看到你執行和執行的程式碼套件。
  • Xdebug包括 “跟蹤 “功能,它將把每個函式的呼叫寫到磁碟上。這將包括引數、變數賦值和返回值。
  • Xdebug還對標準的PHP錯誤報告做了改進。我們將在後面介紹更多這方面的內容。

鑑於這些特性,有很多方法可以在你的工作流程中使用Xdebug(以及任何類似的偵錯程式)。我們將在下一節中介紹這些。

為什麼要使用Xdebug?

許多開發者不會有一個專門的除錯工作流程,使用第三方工具和擴充套件。這是因為 PHP 包含了它自己的基本錯誤記錄。你會使用as error_logvar_dumpprint等命令來檢視變數和函式呼叫的結果。

例如,有很多片段你可以重新用於WordPress的開發–Stack Overflow上有很多這樣的片段

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function log_me($message) {
if ( WP_DEBUG === true ) {
if ( is_array($message) || is_object($message) ) {
error_log( print_r($message, true) );
} else {
error_log( $message );
}
}
}
function log_me($message) { if ( WP_DEBUG === true ) { if ( is_array($message) || is_object($message) ) { error_log( print_r($message, true) ); } else { error_log( $message ); } } }
function log_me($message) {
if ( WP_DEBUG === true ) {
if ( is_array($message) || is_object($message) ) {
error_log( print_r($message, true) );
} else {
error_log( $message );
}
}
}

然而,這種方法也有一些重要的缺點。

  • 你首先必須確保你為你所使用的平臺啟用錯誤日誌。在這種情況下,你要啟用 WP_DEBUG (稍後會有更多介紹)。
  • 這個 “轉儲 “除錯的例子比步驟除錯提供的調查範圍要小。在這裡,你只能輸出你定義的東西。

後一點需要很多手工操作,尤其是當你的日常工作不是系統管理員的時候。例如,如果你想除錯一個程式碼塊,你可能會根據你定義的一個變數來新增你的程式碼段。然而,它可能不是問題的根源,甚至不能說明正在發生什麼。

相反,像Xdebug這樣的工具可以發揮其魔力,提供更大的範圍。

  • 你可以在執行過程中的不同點 “破壞 “你的程式碼,以檢視實時發生的情況。
  • 有無數的指標、視覺化、分支等等來幫助你確定你的程式碼在做什麼以及它是如何反應的。
  • 有時,你甚至可以在除錯過程中即時改變數值。這提供了巨大的價值,甚至對於工作良好的程式碼套件也是如此。你基本上可以在任何時候進行手動單元測試。
  • 因為你使用斷點來標記要除錯的區域,所以你不需要在你的程式碼中使用片段工作。這可以使你的程式碼更乾淨,並減少未來問題的數量。

總的來說,使用像Xdebug這樣的工具是一個主動的決定,而不是一個被動的決定。你可以把步驟除錯作為核心開發過程的一部分,就像實施單元測試作為測試驅動開發(TDD)的一部分。

如何開啟PHP錯誤日誌

雖然你可以在沒有具體錯誤的情況下除錯你的程式碼,但在沒有開啟Xdebug的情況下知道問題是否發生往往是很好的。這給你一個探索的起點。這不是嚴格意義上的必要條件,但可以成為你的鏈條中的一個有用部分。

要報告每一個出現的錯誤,你需要在相關的PHP檔案的頂部新增一行。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
error_reporting(E_ALL);
error_reporting(E_ALL);
error_reporting(E_ALL);

這是一個包羅永珍的命令,你可以用ini_set函式實現同樣的目的。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ini_set('error_reporting', E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('error_reporting', E_ALL);

這讓你可以逐個專案地改變php.ini檔案中的設定。雖然你可以進入這個檔案並進行手動更改,但通常使用 ini_set 來更改特定的引數是一個更好的主意:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ini_set('display_errors', '1');
ini_set('display_errors', '1');
ini_set('display_errors', '1');

一旦你把主動錯誤報告設定成你喜歡的樣子,你就可以開始用Xdebug工作。

如何使用Xdebug

在接下來的幾個部分,我們將向你展示如何使用Xdebug,包括你需要設定的步驟。雖然我們不能涵蓋每個工具的各個方面,但這個快速入門指南會讓你快速入門。

不過,首先,你需要安裝Xdebug。讓我們來看看如何做到這一點。

1. 為你的作業系統(OS)安裝Xdebug

因為Xdebug可以適應任何數量的設定,所以每個設定的具體過程都會略有不同。在作業系統層面上,有一些區別。

  • Windows:這是一個有點複雜的設定過程,包括使用現有的 PHP 檔案和安裝嚮導,然後下載適合你的系統的版本。
  • Linux:這裡的方法可以說是最直接的了。你可以使用包管理器來安裝Xdebug,或者PHP擴充套件社羣庫(PECL)
  • Mac:這個方法也很簡單。一旦你安裝了PECL,你可以在終端例項中執行 pecl install xdebug 。你還需要在你的系統上安裝XCode命令列工具和PHP。

然而,大多數使用者不會想堅持使用系統級的Xdebug例項。相反,你會想把它整合到你自己的開發環境中。

2. 將Xdebug整合到你的開發環境中

一旦你為你的作業系統安裝了Xdebug,你應該把它連線到你的環境中。

這裡有很多支援的系統和工具,我們無法一一介紹。稍後,我們將為你提供PhpStorm的說明。即便如此,還有很多其他流行的環境可以選擇。下面是我們的一些頂級推薦。

Variing Vagrant Vagrants(VVV)

VVV是Make WordPress網站上的命名環境之一。

Varying Vagrant Vagrants標誌

Varying Vagrant Vagrants標誌

好訊息是,VVV已經包括了Xdebug的一個版本,但你需要啟用它。你可以在一個終端視窗中使用安全殼(SSH)來完成這個任務。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
vagrant ssh -c "switch_php_debugmod xdebug"
vagrant ssh -c "switch_php_debugmod xdebug"
vagrant ssh -c "switch_php_debugmod xdebug"

不過,這對效能有一點影響,如果你提供你的網站,你將需要把這個選項重新開啟。

Laravel Valet

對於一些使用者來說, Laravel的Valet代表了一個近乎完美的網路開發環境. 更棒的是, 你可以將Xdebug與之整合.

要做到這一點, 你需要為偵錯程式建立一個配置檔案. 你可以在命令列中使用 php --ini 找到你自己的路徑, 這將返回一些不同的檔案路徑:

終端機顯示配置檔案的路徑列表

終端機顯示配置檔案的路徑列表

接下來,在其他.ini檔案的路徑上建立一個新的xdebug.ini檔案。在我們的例子中,它位於/opt/homebrew/etc/php/7.4/conf.d

一旦你開啟這個新檔案,也要開啟載入的配置檔案(你的主php.ini檔案)的路徑。兩者都開啟後,在底部新增以下內容。

  • php.ini: zend_extension="xdebug.so"
  • xdebug.ini: xdebug.mode=debug

一旦你儲存了你的改動,從終端執行 valet restart ,然後在你的網站的一個檔案中加入 phpinfo(); exit; 。你想通過在瀏覽器中快速載入頁面來檢查這是否有效。

PHP資訊介面

PHP資訊介面

注意你可能需要用 sudo brew services restart php 來重啟PHP,同時用 php --info | grep xdebug來檢查你的系統安裝Xdebug是否正確。你會注意到輸出中的Xdebug專用行:

檢查你的系統安裝Xdebug是否正確

從這裡,你可以尋求將Xdebug納入你選擇的編碼編輯器中。

XAMPP

與Valet一樣,XAMPP的過程也有幾個部分。然而,Windows和macOS版本有兩個不同的過程。

首先安裝XAMPP,然後快速檢查你的系統中是否存在php_xdebug.dll檔案(Windows)或xdebug.so檔案(macOS)。

顯示XAMPP檔案測試的終端視窗

顯示XAMPP檔案測試的終端視窗

如果該檔案存在,就可以繼續配置了。否則,首先需要下載適合Windows的二進位制檔案–為你喜歡的PHP版本下載一個64位的檔案–或者如果你用的是Mac,則需要安裝更多的依賴項。

對於 Windows,重新命名 DLL 檔案 php_xdebug.dll,然後把它移到 \xampp\php\ext 檔案路徑中。接下來,在你喜歡的程式碼編輯器中開啟\xampp\php\php.ini檔案並新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
output_buffering = Off
output_buffering = Off
output_buffering = Off

在 [XDebug] 部分,新增以下三行。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=trigger
zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=trigger
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=trigger

一旦你儲存了你的更改,重新啟動Apache並測試Xdebug。

對於Mac,你要確保你在終端例項中使用 xcode-select --install 來安裝Xcode命令列工具。之後,有三個軟體包你要用Homebrew來安裝。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
brew install autoconf automake libtool
brew install autoconf automake libtool
brew install autoconf automake libtool

在某些情況下,你還需要重新安裝XAMPP以獲得核心程式和 “開發者檔案”。你應該可以只重新安裝這些檔案,但你要先對你現有的設定進行備份。

接下來,在你的系統上導航到Xdebug原始檔夾的下載,解壓TGZ檔案。在一個終端視窗中,導航到該目錄並執行以下程式:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
phpize
pecl install xdebug
phpize pecl install xdebug
phpize
pecl install xdebug

注意,你可能也需要在這裡使用 sudo 。從這裡,你可以編輯XAMPP的php.ini檔案。對於大多數macOS安裝,你可以在/Applications/XAMPP/xamppfiles/etc/php.ini中找到它。在這個目錄中,你也會找到你的xdebug.so檔案的路徑–記下它並使用它來代替本片段中的檔案路徑佔位符。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[xdebug]
zend_extension=/path/to/xdebug.so
xdebug.mode=develop,degug
xdebug.start_with_request=yes
[xdebug] zend_extension=/path/to/xdebug.so xdebug.mode=develop,degug xdebug.start_with_request=yes
[xdebug]
zend_extension=/path/to/xdebug.so
xdebug.mode=develop,degug
xdebug.start_with_request=yes

為了測試這是否有效,在htdocs XAMPP主目錄下建立一個新的xdebug_info.php檔案。在裡面,新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
xdebug_info();
<?php xdebug_info();
<?php
xdebug_info();

…然後重新整理Apache並在瀏覽器中測試Xdebug。

結合PhpStorm使用Xdebug

一旦你通過作業系統和你的開發環境安裝了Xdebug,你還需要檢視偵錯程式本身。你將通過你選擇的程式碼編輯器或整合開發環境(IDE)來做這件事。就像你的環境一樣,有很多可供選擇的,每一個都可能有不同的方法。

這就是說,許多開發人員選擇使用JetBrains的PhpStorm。事實上,PhpStorm提供了 “感知WordPress的協助“–而且它也是一個受歡迎的選擇,因為有許多其他原因。

PhpStorm介面

PhpStorm介面

JetBrains 網站包括連線 Xdebug 和 PhpStorm 的完整說明,但我們將在此回顧一下。

首先,在Preferences窗格中導航到Languages & Frameworks > PHP頁面。在這裡,開啟CLI Interpreter下拉欄位旁邊的More Items串選單:

CLI直譯器

在PhpStorm中選擇一個CLI直譯器

這將顯示一些關於你的 PHP 版本和直譯器的進一步細節。如果你點選Configuration file選項旁邊的More items省略號,你會看到php.ini檔案的完整路徑。

在PhpStorm中修改PHP配置

在PhpStorm中修改PHP配置

接下來你將使用這個PHP檔案來繼續設定過程

在php.ini檔案中工作

這裡的第一個任務是編輯出任何影響 Xdebug 如何與 PhpStorm 一起工作的行。

php.ini 檔案中,尋找以下幾行,並將其刪除或註釋掉。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
zend_extension=<path_to_zend_debugger>
zend_extension=<path_to_zend_optimizer>
zend_extension=<path_to_zend_debugger> zend_extension=<path_to_zend_optimizer>
zend_extension=<path_to_zend_debugger>
zend_extension=<path_to_zend_optimizer>

這些行不會在所有情況下出現,所以如果你沒有看到它們,不要驚慌。

接下來,在檔案中新增以下內容。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="<the port (9003 by default) to which Xdebug connects>"
[xdebug] zend_extension="xdebug.so" xdebug.mode=debug xdebug.client_host=127.0.0.1 xdebug.client_port="<the port (9003 by default) to which Xdebug connects>"
[xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="<the port (9003 by default) to which Xdebug connects>"

關於這套程式碼,有幾件事需要注意。

  • 你可能已經有一個[xdebug] 部分,在這種情況下你可以省略第一個指定。
  •  zend_extension 條目可能需要你新增xdebug.so的完整路徑來連線。
  • 雖然它可能看起來像一個佔位符,但 xdebug.client_port 引數是你在程式碼內的設定方式。

一旦你新增了這些,儲存並關閉檔案,然後從命令列測試PHP版本(使用 php --version)。

使用macOS終端測試PHP和Xdebug的當前安裝

使用macOS終端測試PHP和Xdebug的當前安裝

如果你有一個工作版本的Xdebug,它將顯示為PHP擴充套件之一。你也可以將 phpinfo(); 新增到一個新檔案中,並在瀏覽器中進行測試。

這就是讓Xdebug作為PhpStorm的預設偵錯程式所需要做的一切。使用它之前的最後一步是安裝一個瀏覽器輔助擴充套件。

安裝一個瀏覽器輔助擴充套件

你需要在你的瀏覽器和 PhpStorm 之間建立的最後一個關鍵連線,是通過啟用伺服器上的步驟除錯來完成的。雖然你可以在命令列中使用特殊的 GET 或 POST 值來做這件事,但使用一個擴充套件是更直接的。

我們推薦使用專用的Xdebug Helper擴充套件。你可以在你選擇的瀏覽器上安裝它:

如果你想探索其他擴充套件,JetBrains網站為最流行的瀏覽器提供了一些額外的選擇。

一旦你安裝了你選擇的瀏覽器擴充套件,你不應該再調整任何進一步的配置設定。從這裡,你可以開始使用PhpStorm的Xdebug。

使用Xdebug

雖然我們在這裡使用PhpStorm,但你會看到不同IDE之間有類似的佈局和介面–儘管也會有一些明顯的區別。

有幾個概念結合起來形成了整個除錯體驗。

  • 斷點。這些點是Xdebug會停下來讓你檢查輸出的地方。你可以根據自己的需要設定任意多的斷點。
  • 監聽連線。你可以開啟或關閉這個功能,儘管大多數開發者總是把它開啟。
  • 除錯螢幕。你的大部分時間將在除錯介面中度過–你將在這裡處理各種程式碼行、變數和引數。

第一步是啟用監聽–沒有監聽,你就無法除錯任何東西。要做到這一點,請點選工具欄上的Run > Start Listening for PHP Debug Connections選項。

在PhpStorm中開啟的執行選單

在PhpStorm中開啟的執行選單

作為一種選擇,你可以點選PhpStorm工具欄中的 “telephone”圖示:

使用PhpStorm工具條內的電話圖示監聽PHP除錯連線

使用PhpStorm工具條內的電話圖示監聽PHP除錯連線

這兩個選項中的任何一個都會開始監聽連線。

從這裡,你可以開始在程式碼編輯器的溝槽中設定斷點。一個紅點表示一個斷點,你可以點選它來啟用:

在PhpStorm編輯頁面的溝槽內設定斷點

在PhpStorm編輯頁面的溝槽內設定斷點

當你想除錯你的程式碼時,最直接的方法是開始監聽,設定斷點,然後前往瀏覽器中的特定頁面。在瀏覽器中找到你的擴充套件圖示,然後點選它,選擇 “Debug”選項:

選擇debug瀏覽器

在瀏覽器工具欄內選擇除錯選項,使用一個專門的擴充套件

這將在PhpStorm中開啟偵錯程式並提供好訊息或壞訊息:

使用PhpStorm偵錯程式與Xdebug

使用PhpStorm偵錯程式與Xdebug

如果你右鍵單擊各種值、屬性、引數和變數,你將能夠訪問一個進一步的上下文選單。這為你提供了大量的額外空間來測試和除錯你的程式碼:

在PhpStorm偵錯程式中使用右鍵上下文選單來設定新值

在PhpStorm偵錯程式中使用右鍵上下文選單來設定新值

例如,你可以沿著路徑為變數設定不同的值。這可能是故意要破壞你的程式碼,看看會發生什麼,也可能是測試已經需要修復的程式碼的一種方式。無論哪種方式,這都為你提供了一個極好的方法來除錯你的程式碼,而不需要先改變它。

命令小貼士

在我們結束這篇文章之前,我們應該提到快捷鍵。

像許多其他軟體一樣,有各種方法可以僅使用鍵盤在Xdebug(和PhpStorm)中導航。事實上,你甚至可以使用命令列來除錯PHP指令碼。

一旦Xdebug啟動並執行,你可以使用以下命令來進行操作:

命令 快捷方式
指定要監聽的埠(如 [9003] -p [value]
Sets a breakpoint on the specified line for the file path given. breakpoint_set -t line file:///<path> -n <line>
在給定檔案路徑的指定行上設定一個斷點 run
步入下一個可執行行 step_into
列出當前範圍內的變數和值 context_get
顯示指定屬性的值 property_get -n <property>

雖然您的特定程式碼編輯器將有自己的專用快捷方式,但這裡的重點是PhpStorm。請看下面的鍵盤快捷鍵表,瞭解如何將Xdebug與PhpStorm配合使用:

命令 Windows macOS
查詢動作 Ctrl + Shift + A Shift + Cmd + A
開啟偵錯程式 Shift + F9 Ctrl + D
切換斷點 Control + F8 Cmd + F8
進入 F7 F7
跨越 F8 F8
檢視斷點 Ctrl + Shift + F8 Shift + Cmd + F8
恢復程式 F9 F9
評估當前表示式 Alt + F8 Option + F8

評估當前表示式慶幸的是,這裡沒有太多需要記憶的東西。你必須開啟偵錯程式,設定每行的斷點,監聽連線,並執行你的指令碼。

然而,如果你需要一個特定任務的快捷方式,你可以使用PhpStorm查詢動作命令。

在PhpStorm中使用查詢動作選單

在PhpStorm中使用查詢動作選單

一旦你開始在這個空間裡打字,你就會看到一個動態的命令和相關的快捷鍵列表。你還可以通過Help > Keyboard Shortcuts PDF選單找到所有鍵盤快捷鍵的PDF版本。

如果你想在使用滑鼠工作時更多地實時檢視快捷方式,JetBrains提供了Key Promoter X外掛。

PhpStorm介面顯示Key Promoter X的通知

PhpStorm介面顯示Key Promoter X的通知

這個方便的工具將顯示你最近執行的動作的通知,以及其相關的鍵盤快捷鍵。一旦你學會並使用了這些快捷鍵,你就可以逐步淘汰這個外掛,恢復你螢幕上的寶貴空間。

小結

除錯的實踐已經從它卑微的開始走過了漫長的道路;現在它所包含的範圍比它的祖先所能想象的要廣得多。要想在修復PHP程式碼時進行徹底的工作,你需要使用一個合格的工具。有許多優秀的擴充套件和工具可供選擇,但Xdebug是一個有爭議的領跑者。

正如我們所看到的,Xdebug可以適應甚至是最折衷的程式碼編輯器的口味,當它與PhpStorm搭配時尤其出色。然而,無論你的設定如何,通常都會有一個Xdebug的版本來滿足你的需求。總的來說,它是一個強大、靈活和直觀的工具。

評論留言