Skip to content

如何使用 Xdebug 和 PHPStorm 断点调试

简介

  • Xserver中的所有 php 版本都已经预先安装了 Xdebug扩展 不用自己安装,开箱即用。你可以执行命令查看 php 的版本和 Xdebug 的版本
shell
php -v
  • Xserver中所有版本的 php.ini 文件中的 Xdebug 相关配置已经预设,你可以在这个基础上微调

WARNING

修改 php.ini 中 Xdebug 相关配置后,需要重启 php 方可生效.

调试原理

  • php 的调试基于 DBGp 协议,这是一个 CS(client/server)结构的协议。Xdebug 实现了DBGp协议的客户端,PHPStorm(或其他 IDEs,比如 vsCode等) 实现了 DBGp协议的服务端。
  • 在 PHPStorm 中点击监听按钮,就相当于开启了调试服务器,等待 Xdebug 客户端连接。
  • php.ini中开启Xdebug扩展后。当php运行时,Xdebug 会向 PHPStorm 发送调试信息(包含调用栈、变量值等信息),PHPStorm 接收到调试信息后就知道如何断点,和展示调用栈信息。

php.ini中 配置 Xdebug

Xdebug2.x 和 Xdebug3.x 的配置参数有些区别

Xdebug2.x

ini
[xdebug]
;xdebug.so 文件位置
zend_extension="/Applications/xserver/service/php/5.6.40/lib/php/extensions/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler = "dbgp"
xdebug.mode = debug
;对任何请求都开启调试,并不需要添加触发条件
xdebug.remote_autostart = 1
;运行PHPStorm的主机地址,本机调试就是 localhost,远程调试(比如将局域网调试,需要填写局域网 IP地址)
xdebug.remote_host = localhost
;和 PHPStorm 进行 DGGp 通信的端口,需要和 PHPStorm 的 DBGp proxy配置中的 Port 相同
xdebug.remote_port = 9003
;调试标识,需要和 PHPStorm 的 DBGp proxy 配置中的 IDE key 相同
xdebug.idekey = PHPSTORM

Xdebug3.x

ini
[xdebug] 
;php 扩展位置
zend_extension="/Applications/xserver/service/php/8.3.8/lib/php/extensions/xdebug.so"
xdebug.log=xdebug.log
xdebug.mode=debug;
xdebug.remote_handler="dbgp"
;每个请求自动开启调试,而不需要触发条件
xdebug.start_with_request = yes
;运行 PHPStorm 的主机地址
xdebug.client_host = localhost
;和 PHPStorm 中 DBGp proxy 中配置的 Port 保持一致
xdebug.client_port = 9003
;调试标识,需要和 PHPStorm 的 DBGp proxy 配置中的 IDE key 相同
xdebug.idekey="PHPSTORM"

PHPStorm 配置

img_1.png

  • IDE key: 和 php.ini中的 idekey 保持一致
  • Host:DBGp 代理服务器地址,如果是本地调试,则直接填写 localhost
  • Port:和 php.ini 中配置的端口保持一致

img.png

  • 上图中的端口和 php.ini 中的把端口保持一致

监听调试端口

开启 phpstorm 的调试服务(点击下方按钮)

img_2.png