当前位置: 首页 > news >正文

docker环境中配置phpstorm php xdebug调试工具

本文介绍需要有docker使用的经验,通过docker compose up 运行项目实现xdebug断点的使用方式

第一步:在php镜像中安装phpxdebug扩展,比如php7.4对应的是xdebug3.1.6

$ docker exec -it 1ec7116eddbc bash
root@1ec7116eddbc:/srv# php --version
PHP 7.4.33 (cli) (built: Sep  4 2023 08:12:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologieswith Zend OPcache v7.4.33, Copyright (c), by Zend Technologieswith Xdebug v3.1.6, Copyright (c) 2002-2022, by Derick Rethans
root@1ec7116eddbc:/srv# 

第二步:设置项目中的docker-compose.yml

docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址,也就是你本地局域网的ip,也可以直接写成 ip:9100

注意,xdebug。client_host的值应该替换为PhpStorm运行的机器的IP地址,该IP地址可以从Docker容器访问。如果您使用的是Docker for Windows或Docker for Mac,则可以设置xdebug。Client_host到host.docker.internal,它会自动解析到主机的内部地址,让您可以轻松地从容器连接到它。

environment:PHP_DEBUG: host.docker.internal:9100

第三步:配置startuop.sh,添加如下代码

有的安装环境是放在php.ini里的道理一样,就是吧xdebug的配置写入docker容器的配置文件里,我这边是放在startup.sh文件里,或者写到Dockerfile里,最终目的就是把参数写到容器里的xdebug配置文件中。
${PHP_DEBUG_IDEKEY:-xdebug} 代表如果PHP_DEBUG_IDEKEY没有被设置,它将默认使用xdebug
if [ -n "$PHP_DEBUG" ]; thenIFS=':' read -ra ADDR <<< "$PHP_DEBUG"{ \echo 'xdebug.mode=debug,trace' ;\echo 'xdebug.start_with_request =yes' ;\echo 'xdebug.remote_handler="dbgp"' ;\echo "xdebug.idekey=${PHP_DEBUG_IDEKEY:-xdebug}" ;\echo "xdebug.client_host=${ADDR[0]:-127.0.0.1}" ;\echo "xdebug.client_port=${ADDR[1]:-9000}" ;\} >> /etc/php/${PHP_VERSION}/mods-available/xdebug.ini
fi

第四步:运行容器 docker-compose up

然后进入到容器里看下是不是写入成功了,这里每次启动都会写入会有多条还没想好怎么处理

#查看运行的容器
docker ps#进入容器windows
docker exec -it [CONTAINER ID ] bash#退出
exit

打印phpinfo 查看配置

第七步 :配置phpstorm IDE

 

 

如果是第一次断点的话,成功的话会收到下面的连接提示

 完成,可以正常打印了

如果遇到类似只能断点入口文件的index.php缺不能断点项目的其他方法,很可能存在错误,一步步的执行会发现有报错

比如这个提示找不到映射文件,坚决方式也很简单,点击蓝色的设置配置提示所说的绝对路径即可 

扩展文档:

phpstorm官方的配置说明:Configure Xdebug | PhpStorm Documentation

Import from Deployment Configuration Dialog | PhpStorm Documentation

xdebug官方文档 Xdebug: Documentation » Function Trace

相关文章:

  • 计算子网掩码
  • 多种传感器在钢铁工业安全风险监测预警中的应用
  • 硕士毕业论文《基于磁纹理的磁化动力学研究》
  • “探索机器学习的多面世界:从理论到应用与未来展望“
  • 充电学习—3、Uevent机制和其在android层的实现
  • RAG与Langchain简介
  • 湿法消解石墨消解仪 应用化学分析领域石墨炉
  • 苹果的后来者居上策略:靠隐私保护打脸微软
  • 如何开展接口测试
  • antd的表格组件错乱问题
  • 2024 年最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
  • [论文笔记]Are Large Language Models All You Need for Task-Oriented Dialogue?
  • STM32Cube系列教程11:STM32 AES加解密模块性能测试
  • Jackson指定json的key
  • NSNumber转float或double类型避免小数点后补0
  • gcc介绍及安装
  • JavaScript服务器推送技术之 WebSocket
  • select2 取值 遍历 设置默认值
  • TypeScript迭代器
  • ViewService——一种保证客户端与服务端同步的方法
  • 编写符合Python风格的对象
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端技术周刊 2019-02-11 Serverless
  • 如何设计一个比特币钱包服务
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • Python 之网络式编程
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 从如何停掉 Promise 链说起
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (2)nginx 安装、启停
  • (3)nginx 配置(nginx.conf)
  • (6)设计一个TimeMap
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)ssm码农论坛 毕业设计 231126
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (计算机网络)物理层
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (三)终结任务
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)socket Aio demo
  • .NET CF命令行调试器MDbg入门(一)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /bin/rm: 参数列表过长"的解决办法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [1]-基于图搜索的路径规划基础
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [BIZ] - 1.金融交易系统特点
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C#]调用本地摄像头录制视频并保存
  • [C/C++] C/C++中数字与字符串之间的转换