使用 XDEBUG 辅助 PHP 调试(二)
关键词:xdebug php
在上一篇文章『使用 XDEBUG 辅助 PHP 调试(一)』中,我们尝试了,本文会着重介绍配合 vscode 进行代码调试。
xdebug 远程调试的原理是在远端和本地分别部署 xdebug 和 php 项目源代码。
xdebug 会在远端和本地间建立一个用于调试用的网络连接,远端机的每一步执行结果都会通知到本地,从而使本地可以调试远程代码。

首先在本地安装 php debug extension,安装过程略。
配置本地的 debug server,配置文件默认为 launch.json,内容是像下面的形式:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000, // 根据本地机器的情况自定义
"pathMappings": {
"/project-source-code/": "\\\\remote-ip\\project_dir",
}
},
{
......
}
}
配置分两段,只需配置第一段即可。
接下来在需要调试的远端机上修改 xdebug 的配置,并重启 php-fpm,让配置生效。
配置的核心是打开 remote debug 开关,并且配置远端机的监听端口(例子中用的是 19000)
配置内容如下:
[XDebug]
# xdebug扩展的位置,phpstudy已经默认设置好
zend_extension = xdebug.so # 关键一步
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = "127.0.0.1"
xdebug.remote_port = 19000 # 可以根据自己的情况自定义
xdebug.auto_trace=1
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.remote_log = /tmp/xdebug.log
xdebug.max_data=512
xdebug.var_display_max_children=128
xdebug.var_display_max_data=128
别忘了重启远端机上的 php-fpm 让配置生效。
配置完成后,还需要在本地部署源代码,需要注意的是,远端和本地的源代码必须100%一致才可以,为了保持两侧文件始终一致,我采取映射 samba 目录的形式,将远端的目录映射到本地,这样本地文件就和远端一致了。只有这样,才方便我们边修改边调试,否则遇到需要边改边调的情况,则要不停的在两端同步代码,非常繁琐且容易出错。
万事具备后,在本地启动 debug server —— vscode 内点 Listen for XDebug 按钮。这时打开浏览器输入项目的地址,遇到异常等错误,本地调试器就会自动断下来,默认是 Every Thing,也可以通过打断点的方式,只在触发断点才中断执行。
变量成员显示不全的问题
需要注意的时,vscode 内看到的数组,最多只有20个成员,我至今也没有找到可以显示全量成员的方法。但通过 var_dump 打印变量则不受此限制。
fpm 挂起的问题
有时还会遇到 phpfpm 卡在调试器内挂起的现象,可以尝试重启 fpm 解决。如果依然挂起,则可先将 xdebug 禁用(php.ini 中的 zend_extension=xdebug.so 这一行注释掉,重启 fpm),先让 fpm 顺利启动,再恢复 xdebug。

浙公网安备 33010602011771号