網上關於 Xdebug 的安裝調試教程很多,但絕大部分僅限於 Xdebug 的安裝、配置以及如何使用IDE、Xdebug調試程序。其他語言(例如 Java 的 JDB、Python 的 PDB、Go 的 Delve等)都可以使用自帶調試工具,並直接通過IDE進行斷點調試。然而PHP自帶的 phpdbg 並不方便大型框架項目的調試,最常用的調試工具是Xdebug,結合PhpStorm或 Visual Studio Code進行斷點打印、單步執行、堆棧跟蹤、變量監視、遠程調試等操作。
1.PHP常用的幾種調試工具
下面是PHP常用的幾種調試工具進行對比:
| 調試工具 | PHP版本支持 | 功能特性 | 集成支持 | 配置複雜度 | 調試方式 |
|---|---|---|---|---|---|
| Xdebug | php 5.2 + | 基本調試功能、代碼覆蓋率分析、性能分析、遠程調試。 | 支持多種 IDE 集成,如 PhpStorm、Visual Studio Code、Eclipse 等。 | 相對複雜,但提供強大的調試功能。 | 命令行、IDE |
| Zend Debugger | php 4.3. ~ php 5.3. | 基本調試功能、代碼覆蓋率分析、性能分析 | 通常與 Zend Studio 集成,與其他 IDE 的集成相對有限。 | 有一定的使用限制,適合商業用户。 | IDE |
| phpdbg | php 5.6 + | 基本調試功能 | 主要是命令行工具,與 IDE 的集成相對較弱。 | 相對簡單易用,適用於簡單的調試場景。 | 命令行 |
如果只需要基本調試功能,並且熟悉命令行操作,那麼 phpdbg 提供的已經足夠。如果您需要更強大的調試功能,並且希望使用 IDE 進行調試,那麼 Xdebug 或 Zend Debugger 是一個更好的選擇。Zend Debugger 早已停止維護,且通常與 Zend Studio 集成,與其他 IDE 的集成相對有限,當面對中大型項目開發調試時,使用 Xdebug 已成為主流選擇和事實標準。
2、Xdebug的安裝與使用
2.1 Xdebug版本選擇
Xdebug 官方提供了適配各個 PHP 版本的擴展包,開發者可以自行根據需要下載對應的擴展包。如果你不清楚需要哪個版本的Xdebug,你可以這樣。粘貼 phpinfo() 的完整輸出(HTML版本、HTML源代碼或 php -i 輸出的複製和粘貼)並提交 Installation Wizard,此頁面將會告知你需要下載的Xdebug版本。
2.2 在 php.ini 開啓 Xdebug
下載建議安裝的 Xdebug 擴展包版本,將擴展包移動到 PHP 安裝目錄下的 ext 文件夾下後。在 php.ini 配置 xDebug 的相關參數。值得注意的是 Xdebug3 和 Xdebug2 的參數配置差異很大,具體可參考 Xdebug 官網的配置説明 Upgrading from Xdebug 2 to 3。
這裏我將給出兩個版本配置示例。
Xdebug3 的 php.ini 的參數配置
[Xdebug]
zend_extension=xdebug
;作為 XDEBUG_SESSION_START 的值,是通知 PHP 開啓調試的標識
xdebug.idekey=phpstorm
;xdebug3.0中用於代替之前的xdebug.remote_enable=On
xdebug.mode=debug
;xdebug3.0中用於代替之前的xdebug.remote_autostart,trigger對應之前的off,yes對應之前的on
xdebug.start_with_request=trigger
;xdebug3.0中用於代替之前的xdebug.remote_connect_back=On,它會自動從$_SERVER['HTTP_X_FORWARDED_FOR']
;或$_SERVER['REMOTE_ADDR']變量中獲取ip,當然因為$_SERVER只有服務器模式有所以客户端模式是用不了的(可配置其它變量)
;如果找不到ip它會回退(fallback)到xdebug.client_host指定的ip
xdebug.discover_client_host=on
;xdebug3.0中用於代替之前的xdebug.remote_host
xdebug.client_host=localhost
;xdebug3.0中用於代替之前的xdebug.remote_port
xdebug.client_port=9003
;固定填dbgp(因為目前只支持這個協議,也只有這個協議)
xdebug.remote_handler=dbgp
;xdebug3.0中用於代替之前的xdebug.remote_autostart, 是否自動啓動調試器
xdebug.start_with_request=yes
Xdebug2 的php.ini 的參數配置
zend_extension=xdebug
;作為 XDEBUG_SESSION_START 的值,是通知 PHP 開啓調試的標識
xdebug.idekey=phpstorm
;開啓xdebug遠程調試功能,On或1都表示開啓
xdebug.remote_enable=on
;指定IDE所在電腦的ip或域名(暫時指定本機,即127.0.0.1)
xdebug.remote_host=localhost
;指定IDE debug端口(xdebug需要通過該端口與IDE通訊)
xdebug.remote_port = 9001
;打開後,xdebug會忽略remote_host值並自動從$_SERVER中獲取來源ip
xdebug.remote_connect_back=on
;固定填dbgp(因為目前只支持這個協議,也只有這個協議)
xdebug.remote_handler = dbgp
2.3 配置PhpStorm相關參數
3.Xdebug的工作原理
後續再補上
參考
- [0] Xdebug 3 — Documentation
- [1] PhpStorm Xdebug遠程調試環境搭建原理分析及問題排查
- [2] php 調試指南(Xdebug版)
- [3] 成為高級 PHP 程序員的第一步——調試(xdebug 配置篇)
- [4] PhpStorm+xdebug遠程調試php代碼的教程
- [5] Xdebug 之遠程調試
- [6] PHPStorm遠程調試環境搭建以及原理
- [7] Xdebug 原理解釋
- [8] 基於docker的xdebug調試環境