如何使用 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 配置
- IDE key: 和 php.ini中的 idekey 保持一致
- Host:DBGp 代理服务器地址,如果是本地调试,则直接填写 localhost
- Port:和 php.ini 中配置的端口保持一致
- 上图中的端口和 php.ini 中的把端口保持一致
监听调试端口
开启 phpstorm 的调试服务(点击下方按钮)