动态

详情 返回 返回

Xdedubg 調試指南 - 动态 详情

網上關於 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調試環境
user avatar sy_records 头像 rui_sen 头像 crmeb 头像 tangzhangming 头像 guangmingleiluodebaomihua 头像 l7luo 头像 huifeideniao 头像 junxiudetuoba 头像 wangjingyu_5f58472234cff 头像 xiaotuyu 头像 zuiyuesi 头像 shenchendebanma 头像
点赞 14 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.