Xdebug 如何幫助您成為更好的 WordPress 開發人員

已發表: 2022-10-11

正如任何開發人員都可以證明的那樣,在初稿之後,代碼永遠無法投入生產。 開發過程的一個關鍵部分是調試——刪除或更改代碼中所有不起作用的部分。

PHP 的 Xdebug 擴展是根除和消除代碼中所有錯誤的流行方法。

Xdebug 的一大優點是它的靈活性。 無論您首選的框架或開發環境如何,您都可以找到適合您工作流程的 Xdebug 版本。 從那裡開始,掌握該工具不會花費很長時間。

本教程將深入探討 Xdebug,包括安裝過程、將其集成到您的設置中以及一般用法。

首先,讓我們為您提供有關 Xdebug 是什麼以及它的作用的更多背景信息。

介紹 Xdebug

Xdebug 是調試 PHP 代碼的最流行的擴展之一。 您將從您選擇的環境中安裝它,它充當“步進調試器”。

顯示 Xdebug 徽標的綠色分層背景,帶有綠色的“X”。
Xdebug 徽標。

簡而言之,這使您能夠逐行處理代碼,以便您可以逐步了解代碼在程序中的行為和交互方式,以及調查其輸出。 從那裡,您可以根據需要進行更改。

不過,Xdebug 可以做的更多:

  • 您可以使用一組指標和可視化來分析代碼的性能。
  • 當您運行 PHP 單元測試時,您可以查看您運行和執行的代碼套件。
  • Xdebug 包含“跟踪”功能,它將每個函數調用寫入磁盤。 這將包括參數、變量賦值和返回值。
  • Xdebug 還改進了標準的 PHP 錯誤報告。 稍後我們將對此進行更多介紹。

鑑於功能集,有很多方法可以在您的工作流程中使用 Xdebug(和任何類似的調試器)。 我們將在下一節中介紹這些內容。

調試是開發過程的一個關鍵部分——Xebug 的存在是為了讓這個過程更容易點擊推

為什麼要使用 Xdebug

許多開發人員沒有使用第三方工具和擴展的專用調試工作流程。 這是因為 PHP 包含自己的基本錯誤日誌記錄。 您將使用諸如error_logvar_dump和 print 之類的命令來查看變量和函數調用的結果。

例如,您可以將許多片段重新用於 WordPress 開發——Stack Overflow 中充斥著它們:

 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 文件的頂部添加一行:

 error_reporting(E_ALL);

這是一個包羅萬象的命令,您可以使用ini_set函數實現相同的目的:

 ini_set('error_reporting', E_ALL);

這使您可以逐個項目地更改php.ini文件中的設置。 雖然您可以進入此文件並進行手動更改,但使用ini_set更改特定參數通常是一個更好的主意:

 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,你應該將它連接到你的環境。

這裡有太多受支持的系統和工具,我們無法一一介紹。 稍後,我們將為您提供 DevKinsta 和 PhpStorm 的說明。 即便如此,還有許多其他流行的環境可供選擇。 以下是我們的一些重要建議。

不同的流浪流浪者(VVV)

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

藍色背景,包含 Varying Vagrant Vagrants 徽標的 8 位 ASCII 藝術(
不同的流浪流浪者標誌。

好消息是 VVV 已經包含一個 Xdebug 版本,但您需要激活它。 您可以在終端窗口中使用 Secure Shell (SSH) 執行此操作:

 vagrant ssh -c "switch_php_debugmod xdebug"

但是,性能會受到一點影響,如果您配置站點,則需要重新打開此選項。

Laravel 代客

對於一些用戶來說,Laravel 的 Valet 代表了一個近乎完美的 Web 開發環境。 更好的是,您可以將 Xdebug 與其集成。

為此,您需要為調試器創建一個配置文件。 您可以在命令行中使用php --ini找到自己的路徑,這將返回幾個不同的文件路徑:

顯示 .ini PHP 配置文件路徑列表的終端窗口和一個空的命令提示符光標。
顯示配置文件路徑列表的終端。

接下來,在其他.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; phpinfo(); exit; 到您網站的文件之一。 您需要通過瀏覽器中的快速頁面加載來檢查這是否有效。

瀏覽器中的 PHP 信息文件,顯示 Xdebug 徽標和
PHP 信息屏幕。

請注意,您可能需要使用sudo brew services restart php ,並使用php --info | grep xdebug檢查您的 Xdebug 系統安裝是否正確。 php --info | grep xdebug 。 您會注意到輸出中特定於 Xdebug 的行:

一個終端窗口,顯示許多不同的 Xdebug 配置設置(例如輸出名稱和顯示變量)。提示顯示

從這裡,您可以將 Xdebug 合併到您選擇的編碼編輯器中。

XAMPP

就像 Valet 一樣,XAMPP 的流程也有幾個部分。 但是,Windows 和 macOS 版本有兩個不同的進程。

首先安裝 XAMPP,然後快速檢查系統上是否存在php_xdebug.dll文件 (Windows) 或xdebug.so文件 (macOS):

一個終端窗口,顯示一個片段以測試一段時間是否存在。如果是,終端將輸出
顯示 XAMPP 文件測試的終端窗口。

如果文件存在,您可以繼續進行配置。 否則,您首先需要下載適用於 Windows 的正確二進製文件(您首選 PHP 版本的 64 位文件),或者如果您使用的是 Mac,則需要安裝更多依賴項。

對於 Windows,重命名 DLL 文件php_xdebug.dll ,然後將其移動到\xampp\php\ext文件路徑。 接下來,在您喜歡的代碼編輯器中打開\xampp\php\php.ini文件並添加以下內容:

 output_buffering = Off

[XDebug]部分,添加以下三行:

 zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=trigger

保存更改後,重新啟動 Apache 並測試 Xdebug。

對於 Mac,您需要確保在終端實例上使用xcode-select --install安裝 Xcode 命令行工具。 之後,您需要使用 Homebrew 安裝三個軟件包:

 brew install autoconf automake libtool

在某些情況下,您還需要重新安裝 XAMPP 以獲取核心程序和“開發人員文件”。 您應該只能重新安裝這些文件,但您需要先對現有設置進行備份。

接下來,導航到系統上 Xdebug 源文件夾的下載並解壓縮 TGZ 文件。 在終端窗口中,導航到該目錄並運行以下命令:

 phpize pecl install xdebug

請注意,您可能也需要在此處使用sudo 。 從這裡,您可以編輯 XAMPP php.ini 文件。 對於大多數 macOS 安裝,您可以在/Applications/XAMPP/xamppfiles/etc/php.ini中找到它。 在此目錄中,您還可以找到xdebug.so文件的路徑——記下這一點,並使用它代替此代碼段的文件路徑佔位符:

 [xdebug] zend_extension=/path/to/xdebug.so xdebug.mode=develop,degug xdebug.start_with_request=yes

要測試這是否有效,請在主htdocs XAMPP 目錄中創建一個新的xdebug_info.php文件。 在裡面,添加以下內容:

 <?php xdebug_info();

…然後刷新 Apache 並在瀏覽器中測試 Xdebug。

將 PhpStorm 與 Xdebug 一起使用

通過操作系統和開發環境安裝 Xdebug 後,您還需要查看調試器本身。 您將通過您選擇的代碼編輯器或集成開發環境 (IDE) 來完成此操作。 與您的環境一樣,有很多可供選擇,並且每個可能有不同的方法。

也就是說,許多開發人員選擇使用 JetBrains 的 PhpStorm。 事實上,PhpStorm 提供了“支持 WordPress 的幫助”——由於許多其他原因,它也是一個受歡迎的選擇。

PhpStorm 界面,左側有一個項目樹目錄,使用白色、藍色和黃色文本。右側包含 WordPress 插件的 PHP 代碼,使用橙色、紫色、綠色和白色文本。
PhpStorm 界面。

JetBrains 網站包含有關連接 Xdebug 和 PhpStorm 的完整說明,但我們將在此處查看它們。

首先,導航到Preferences窗格中的Languages & Frameworks > PHP頁面。 在這裡,打開CLI Interpreter下拉字段旁邊的More Items kebab 菜單:

部分 PhpStorm 首選項屏幕,顯示頁面鏈接 (
在 PhpStorm 中選擇 CLI 解釋器。

這將顯示有關您的 PHP 版本和解釋器的更多詳細信息。 如果單擊配置文件選項旁邊的更多項目省略號,您將看到php.ini文件的完整路徑:

部分 PhpStorm 更多項目屏幕顯示配置名稱、PHP 可執行文件的路徑、當前 PHP 和調試器版本號,以及 PHP 安裝各個方面的配置文件列表。
修改 PhpStorm 中的 PHP 配置。

接下來您將使用此 PHP 文件繼續設置過程。

在 php.ini 文件中工作

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

php.ini文件中,查找以下行並刪除它們或將它們註釋掉:

 zend_extension=<path_to_zend_debugger> zend_extension=<path_to_zend_optimizer>

這些線條並非在所有情況下都存在,因此如果您沒有看到它們,請不要驚慌。

接下來,將以下內容添加到文件中:

 [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 ):

Big Sur 藍色、紅色和紫色漸變桌面背景,顯示 macOS 終端窗口。它顯示了 Zend Engine、Xdebug 和 Zend OPcache 的“php -version”命令,以及 PHP 版本號、版權聲明和已安裝的版本(包含版本號)。
使用 macOS 終端測試 PHP 和 Xdebug 的當前安裝。

如果您有 Xdebug 的工作版本,它將顯示為 PHP 擴展之一。 您還可以添加phpinfo(); 到一個新文件並在瀏覽器中測試它。

這就是讓 Xdebug 作為 PhpStorm 的默認調試器工作所需要做的所有事情。 使用它之前的最後一步是安裝瀏覽器幫助程序擴展。

安裝瀏覽器助手擴展

您需要建立的最後一個關鍵連接是在您的瀏覽器和 PhpStorm 之間,通過在服務器上激活分步調試來完成。 雖然您可以使用特殊的GETPOST值從命令行執行此操作,但使用擴展更直接。

我們建議使用專用的 Xdebug Helper 擴展。 您可以將其安裝在您選擇的瀏覽器上:

  • Chrome/Chromium/Brave 的 Xdebug 助手
  • Firefox 的 Xdebug 助手
  • Safari 的 Xdebug 助手

如果您想探索其他擴展,JetBrains 網站為最流行的瀏覽器提供了一些附加選項。

一旦您安裝了您選擇的瀏覽器擴展程序,您就不必調整任何進一步的配置設置。 從這裡,您可以開始使用帶有 PhpStorm 的 Xdebug。

使用 Xdebug

雖然我們將在這裡使用 PhpStorm,但您會看到不同 IDE 之間的佈局和界面相似——儘管也會有一些明顯的差異。

有幾個概念結合起來形成了整個調試體驗:

  • 斷點:這些是 Xdebug 將停止讓您檢查輸出的點。 您可以根據需要設置任意數量的這些。
  • 監聽連接:您可以打開和關閉此功能,但大多數開發人員將始終保持打開狀態。
  • 調試屏幕:您的大部分時間將花在調試界面上——您將在其中處理各種代碼行、變量和參數。

第一步是激活監聽——沒有它你將無法調試任何東西。 為此,請單擊工具欄中的Run > Start Listening for PHP Debug Connections選項:

部分 PhpStorm 界面屏幕,左側顯示樹目錄和應用程序工具欄。運行菜單打開,並且
PhpStorm 中打開的運行菜單。

作為替代方案,您可以單擊 PhpStorm 工具欄中的“電話”圖標:

PhpStorm 工具欄的特寫,其中顯示了當前運行配置的選項、各種 Git 選項和 Start Listening for PHP Debug Connections 電話圖標(帶有工具提示)。
使用 PhpStorm 工具欄中的電話圖標偵聽 PHP 調試連接。

這些選項中的任何一個都將開始偵聽連接。

從這裡,您可以開始在代碼編輯器的排水溝中設置斷點。 紅點表示一個斷點,可以點擊激活:

PhpStorm 界面特寫,左側為樹形目錄,右側為編碼面板。在編輯器的排水溝中,在第 45、50 和 55 行有帶白色刻度的紅點。這些是用於調試的斷點。
PhpStorm 編輯頁面中的斷點。

當您想要調試代碼時,最直接的方法是開始監聽,設置斷點,然後前往瀏覽器中的特定頁面。 在瀏覽器中找到擴展程序的圖標,然後單擊它並選擇“調試”選項:

Mozilla Firefox 瀏覽器,顯示綠色背景(和
使用專用擴展在瀏覽器工具欄中選擇“調試”選項。

這將在 PhpStorm 中打開調試器並傳遞好消息或壞消息:

部分 PhpStorm 屏幕,顯示打開的調試器面板。左側顯示了各種斷點,包括文件名、行號和函數引用。右側顯示了整個代碼中變量的值以及值類型。
將 PhpStorm 調試器與 Xdebug 一起使用。

如果您右鍵單擊各種值、屬性、參數和變量,您將能夠訪問進一步的上下文菜單。 這為您提供了足夠的額外空間來測試和調試代碼:

PhpStorm 調試器界面的一部分,左側有斷點、文件名、行號和函數引用列表。右側顯示代碼中突出顯示的值,上下文菜單打開。其中的選項是“設置值…”——將新值分配給變量和調試代碼的方式。
使用 PhpStorm 調試器中的右鍵單擊上下文菜單設置新值。

例如,您可以為路徑上的變量設置不同的值。 這可能是故意嘗試破壞您的代碼並查看會發生什麼,或者它可能是一種測試已經需要修復的代碼的方法。 無論哪種方式,這都為您提供了一種無需先更改代碼即可調試代碼的絕妙方法。

Kinsta 如何幫助您調試 WordPress 網站

WordPress 通過WP_DEBUG和其他工具(例如查詢監視器)提供了自己的一組調試選項。 這些啟用了一種模式,您將開始在整個站點和儀表板上看到以前隱藏的錯誤消息。 從那裡,您可以開始找出問題所在。

您還可以使用WP_DEBUG_LOG保存這些錯誤消息,這為您提供了一種記錄站點問題的方法。 我們在博客的另一篇文章中介紹瞭如何設置它。 通過您的 MyKinsta 儀表板(和站點 > 工具屏幕)輕鬆設置:

MyKinsta 儀表板,顯示左側的紫色側邊欄和另一個灰色子菜單。這裡有兩個選項可以切換——右側的搜索和替換工具,以及左側的 WordPress 調試工具。
MyKinsta 儀表板中的 WordPress 調試選項。

如果您將此與免費的 DevKinsta 本地環境工具配對,您還可以通過一鍵式方式為您啟動的每個站點啟用和禁用WP_DEBUG

單個站點的 DevKinsta 儀表板。它顯示數據庫設置,包括主機、端口、名稱和用戶憑據。還有一個
在 DevKinsta 的控制面板中啟用 WP_DEBUG。

這意味著您可以在開發過程中捕獲站點上的錯誤,並確保它們不會進入您的實時站點。 這些模式也很容易關閉——對站點和用戶安全都至關重要。

所有 Kinsta 計劃還附帶內置的 Kinsta APM 工具,這是我們為 WordPress 網站定制設計的性能監控工具。

命令備忘單

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

像許多其他軟件一樣,有多種方法可以單獨使用鍵盤來瀏覽 Xdebug(和 PhpStorm)。 事實上,您甚至可以使用命令行來調試 PHP 腳本。

一旦 Xdebug 啟動並運行,您可以使用以下命令來繞過:

命令捷徑
指定要監聽的端口(例如[9003] -p [value]
在給定文件路徑的指定行上設置斷點。 breakpoint_set -t line file:///<path> -n <line>
運行腳本直到結束或下一個斷點run
進入下一個可執行行step_into
列出當前範圍內的變量和值context_get
顯示指定屬性的值property_get -n <property>

雖然您的特定代碼編輯器將有自己的專用快捷方式,但這裡的重點是 PhpStorm。 看一下將 Xdebug 與 PhpStorm 結合使用的鍵盤快捷鍵表:

命令視窗蘋果系統
尋找行動Ctrl + Shift + A Shift + Cmd + A
打開調試器Shift + F9 Ctrl + D
切換斷點控制+ F8 Cmd + F8
踏入F7 F7
跨過F8 F8
查看斷點Ctrl + Shift + F8 Shift + Cmd + F8
恢復計劃F9 F9
評估當前表達式Alt + F8 選項+ F8

謝天謝地,這裡沒有太多要記住的東西。 您必須打開調試器、每行設置斷點、偵聽連接並運行腳本。

但是,如果您需要特定任務的快捷方式,可以使用 PhpStorm Find Action命令:

PhpStorm 界面,顯示 Find Action 顯示。 All、Classes、Files、Symbols、Actions 和 Git 有各種搜索過濾器。搜索詞是
使用 PhpStorm 中的 Find Action 菜單。

一旦您開始在此空間中輸入,您將看到命令和相關快捷方式的動態列表。 您還可以通過幫助 > 鍵盤快捷鍵 PDF菜單找到所有鍵盤快捷鍵的 PDF 版本。

如果您想在使用鼠標時更多地實時查看快捷方式,JetBrains 提供了 Key Promoter X 插件:

一個 PhpStorm 界面窗口,顯示了許多選項來查找文件和項目以及相應的快捷方式。右下角有兩個通知,格式為
顯示 Key Promoter X 通知的 PhpStorm 界面。

這個方便的工具將顯示您最近執行的操作的通知,以及相關的鍵盤快捷鍵。 學習並使用快捷方式後,您可以逐步淘汰此插件並將寶貴的空間恢復到您的屏幕上。

正如任何開發人員都可以證明的那樣,在初稿之後,代碼永遠無法投入生產。 調試是關鍵——這就是 Xdebug 的用武之地Click to Tweet

概括

調試實踐從卑微的開始已經走過了漫長的道路。 它現在涵蓋的範圍比其祖先可能想像的要廣泛得多。 要在修復 PHP 代碼時進行徹底的工作,您需要使用一個稱職的工具。 有許多出色的擴展和工具可供選擇,但 Xdebug 是一個有爭議的領先者。

正如我們所見,Xdebug 甚至可以適應代碼編輯器中最不拘一格的口味,與 PhpStorm 搭配使用時尤其出色。 但是,無論您的設置如何,通常都會有一個 Xdebug 版本來滿足您的需求。 總的來說,它是一個功能強大、靈活且直觀的工具。

你認為 Xdebug 值得它的高度讚揚,還是有其他你更喜歡的調試工具? 在下面的評論部分讓我們知道!