phpstrom、laradock、xdebug 进行断点调试

phpstrom、laradock、xdebug 进行断点调试

背景:
  1. laravel 框架封装太完善,经常搞不明白究竟用的是哪个类
  2. 复杂一点的算法,使用 dd方法调试时,需要疯狂dd,显得过于鸡肋
调试流程:
  1. 发请求、跑调试代码
  2. 安装 xdebug 扩展的 PHP 检查是否有预期参数,有就交给 xdebug 处理
  3. xdebug 模块根据配置去链接指定主机的特定端口
  4. 然后就开始快乐的调试
我们要做的:
  1. 确定自己需要执行的 PHP 模式,如 cli,php-fpm,或者两者都要
  2. 安装并开启 xdebug 扩展
  3. 配置充当调试客户端的 phpstrom
  4. 开启监听、打断点、运行程序并开始调试
看完教程后的收获有哪些:
  1. 配置与使用 xdebug 功能
  2. phpunit 单元测试
  3. 两种 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构建新镜像,接着执行 docker-compose stop php-fpmdocker-compose rm php-fpm 来停止并删除旧的 php-fpm 容器,最后执行docker-compose up -d php-fpm 来创建新容器
  • c. 使用 docker ps 找到 php-fpm 的 容器ID(我的为 962916a49bdc ),接着执行 docker exec -it 962916a49bdc /bin/bash进入容器并使用 php -v 检查是否已经成功安装扩展。如果成功,会有 with Xdebug字样
  • d. 如果 xdebug 版本不是 3.x 以上的,那就执行 pecl upgrade xdebug 来更新,并记下扩展地址

2、设置 xdebug 配置,与 CLI 模式有少许不同,需要额外设置识别参数。通过 php --ini 来确定PHP配置的目录,执行 php --ini |grep xdebug查看目录下是否有 xdebug 相关的配置,仅保留一个配置,并使用如下配置替换掉:

	zend_extension=扩展地址
	xdebug.client_host=host.docker.internal
	xdebug.idekey=PHPSTORM
	xdebug.client_port=9003
	xdebug.mode=debug
	xdebug.log =日志文件.log
	;xdebug.log  查看日志的地址,如果权限不足可能会导致创建失败

此步骤弄完后需要重启 php-fpm 才能让配置生效。如:退出容器并回到 laradock 目录,执行 docker-compose restart php-fpm命令

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 并保存即可。以后调试,只要把小虫虫图标改为绿色即可,如图:
在这里插入图片描述

错误定位:
  1. 打开 xdebug 扩展日志,以便查找问题
  2. 查看发送请求的参数,是否符合预期
意外问题:
  1. 出问题时,请第一时间查看 xdebug 的错误日志,他可以解决 99% 的问题
  2. 端口被占用时,换一个没有被使用的端口,只要确保 phpstrom 监听的端口 与 xdebug 配置的端口一致即可
  3. 调试时,phpstorm 被触发,日志也正常,却无法正常断点。此时查看调试控制台是否有错误的红色提示。一开始笔者的服务器名称并不是 laradock,然后系统提示没有 laradock 服务器(神奇得很),最后我把服务器的名字修改成为 laradock 就好了。 修改第 3.a 步骤的服务器名字
特别感谢:

感谢,感谢,感谢我亲爱的,敬爱的,耐心十足的 old 大大 ^_^

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值