phpstrom、laradock、xdebug 进行断点调试
背景:
- laravel 框架封装太完善,经常搞不明白究竟用的是哪个类
- 复杂一点的算法,使用
dd 方法调试时,需要疯狂dd ,显得过于鸡肋
调试流程:
- 发请求、跑调试代码
- 安装 xdebug 扩展的 PHP 检查是否有预期参数,有就交给 xdebug 处理
- xdebug 模块根据配置去链接指定主机的特定端口
- 然后就开始快乐的调试
我们要做的:
- 确定自己需要执行的 PHP 模式,如 cli,php-fpm,或者两者都要
- 安装并开启 xdebug 扩展
- 配置充当调试客户端的 phpstrom
- 开启监听、打断点、运行程序并开始调试
看完教程后的收获有哪些:
- 配置与使用 xdebug 功能
- phpunit 单元测试
- 两种 CLI 解析器的配置办法,如:SSH、docker composer
cli模式配置说明
1、安装 xdebug 扩展,并升级到 3.x 以上版本,如: 进入 workspace 容器,执行 pecl install xdebug-3.1.3 来安装 xdebug,并记下扩展地址 2、配置 xdebug 配置。通过 php --ini 来确定 PHP 配置的目录,在目录中新建或修改 xdebug.ini 配置文件,内容如下:
zend_extension=扩展地址
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9300
;xdebug.client_port 开发机监听端口
xdebug.log =日志文件.log
;xdebug.log 查看日志的地址,如果权限不足可能会导致创建失败
3、调通PHP单元测试功能,可以参考这篇文章 phpstrom、laradock、phpunit 进行单元测试 4、修改 phpstrom 进行 Xdebug 调试时所监听的端口,需要与 xdebug.client_port 填写的参数保持一致,如: 5、到这里,我大大的 mac 可以了。但是我的却不行。。。通过查看日志,提示主机172.19.0.1 解析失败。经过苦苦寻找,发现这个地址是在调试的时候 由 phpstrom 带过去的,结果 xdebug 还用它了,如图: 既然如此,那么我们就设置一个新值去覆盖它,如图: 6、再次运行调试代码,就能发现请求带上了设置的参数,鲜花走起 ^_^^_^ 。小伙伴赶紧去打个断点试试
php-fpm 模式配置说明
1、安装 xdebug 扩展,并升级到 3.x 以上版本。为了学习更多,我们通过修改 laradock 配置,并重构容器的方式来修改:
- a. laradock 的 .env 文件,开启如下配置
PHP_FPM_INSTALL_XDEBUG=true ,并记下 PHP_FPM_XDEBUG_PORT=9003 配置的端口值,如:9003 - b. 重新构建 php-fpm 容器,执行
docker-compose build -d php-fpm ,成功后删除旧容器并运行新的构建好的容器 - c. 进入容器使用
php -v 检查是否已经成功安装扩展。如果成功,会有with Xdebug 字样 - d. 如果 xdebug 版本不是 3.x 以上的,那就执行
pecl upgrade xdebug 来更新版本
2、配置 xdebug 配置,与 CLI 模式有少许不同,需要额外设置识别参数。通过 php --ini 来确定PHP配置的目录,此时预计会看到两个与xdebug 相关的配置,一个是仅导入扩展的,另一个是设置 xdebug 配置的,我们打开设置 xdebug 配置的那个,覆盖如下代码:
xdebug.client_host=host.docker.internal
xdebug.idekey=PHPSTORM
xdebug.client_port=9003
xdebug.mode=debug
xdebug.log =日志文件.log
;xdebug.log 查看日志的地址,如果权限不足可能会导致创建失败
3、修改 phpstrom 配置,这里的修改有点多,需要耐心点捏 a. 新怎一个名为 laradock 的服务器(设置 -> PHP -> 服务器),如图:
提示:记得填写服务器上的绝对路径
b. 新增 docker 配置(设置 -> 构建、执行、部署 -> Docker),如图: c. 添加一个链接 php-fpm 容器的 CLI 解析器(设置 -> PHP),如图:
创建后,CLI 解析器会自动命名为 php-fpm
d. 修改新建 CLI 解析器的生命周期为连接到现有容器,如图: e. 添加一个远程调试配置
此步骤弄完后,调试配置步骤,算是弄完了
4、切换 phpstrom 的调试配置为刚刚创建的 web-debug 配置 5、给项目 URL 添加 XDEBUG_SESSION=PHPSTORM 参数后就可以开始调试 6、此步骤为提升体验的。由于每次调试都主动添加 XDEBUG_SESSION 参数,这很是麻烦,且容易忘记那个参数与值,有以下建议: a. 如果是使用 post man 进行调试接口的,可以添加一个全局的参数 XDEBUG_SESSION=PHPSTORM b. 如果是 web 页面的,那就安装 xdebug helper 插件,配置里面的 ide key 为 phpstrom -> PHPSTORM 并保存即可。以后调试,只要把小虫虫图标改为绿色即可,如图:
错误定位:
- 打开 xdebug 扩展日志,以便查找问题
- 查看发送请求的参数,是否符合预期
意外问题:
- 出问题时,请第一时间查看 xdebug 的错误日志,他可以解决 99% 的问题
- 端口被占用是,换一个没有被使用的端口,只要确保 phpstrom 监听的端口 与 xdebug 配置的端口一致即可
- 调试时,phpstorm 被触发,日志也正常,却无法正常断点。此时查看调试控制台是否有错误的红色提示。一开始笔者的服务器名称并不是 laradock,然后系统提示没有 laradock 服务器(神奇得很),最后我把服务器的名字修改成为 laradock 就好了。 修改第 3.a 步骤的服务器名字
特别感谢:
感谢,感谢,感谢我亲爱的,敬爱的,耐心十足的 old 大大^_^
|