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

php + docker + idea debug

需求:

  • 在进行php 编写的时候,为了使环境和prod 更像,使用 docker 镜像模拟线上版本
  • 但是编写代码使用的是 idea 在win10环境下
  • 有时候使用log 定位问题会有一些弊端,还是需要配合xdebug 来实现

进程:

  • 安装 xdebug.so
  • 因为我用的是php 7.0 版本,没有可以直接apt 安装的地方所以使用手动编译
  • 下载xdebug 源码 并编译
#下载对应的编译包
sudo apt-get update && sudo apt-get install php-dev autoconf automake libtool make gcc
wget https://codeload.github.com/xdebug/xdebug/tar.gz/refs/tags/2.7.2 -O xdebug-2.7.2.tar.gz
tar -xvzf xdebug-2.7.2.tar.gz
cd xdebug-2.7.2
#phpize 会为 PHP 扩展准备编译环境。
phpize
#输出类似如下
#Configuring for:
#PHP Api Version:         20151012
#Zend Module Api No:      20151012
#Zend Extension Api No:   320151012
#编译
./configure --enable-xdebug
make
  • 编译完成之后会有一个xdebug.so文件,拷贝到php 能load 到的地方
  • 然后就是修改php.ini 文件,但是会有两个地方,一个是 /etc/php/7.0/cli/php.ini,还有一个是 /etc/php/7.0/fpm/php.ini
  • 这两个的区别是,一个是直接用php 去运行的时候会用到,一个是 php-fpm 的时候会用到,cli 就是直接在控制台输入 php run.php 这种时候调用的,fpm 一般是nginx 转发的时候用到的
  • 直接在php.ini 里加入代码
[Xdebug]
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_name=/mnt/analysisInfo/cachegrind.out.%p
xdebug.remote_port=9099
  • host.docker.internal 指向的是宿主机的地址,正常docker desktop 都认这个,如果是跨ip 的调试,可以直接用对应的ip, profiler_enable_trigger 表示支持查看代码的运行效率啊什么的,可以不填,填了这个的话需要在请求的时候带上头信息XDEBUG_PROFILE=1
  • remote_port 是idea 需要开的监听端口,请注意: 是idea 要开的监听,不是容器,所以不需要把9099 这个端口映射出来
  • idea 在 setting > language > php > Debug 上 有一个 debug port 这个填上 9099
  • 然后再servers 里创建一个 服务的端口监听,比如你的是docker 里的8001 端口,映射到本地的8002 端口,那 servers 里就填8002,因为你最终访问的是 localhost:8002 ,里面的use path map 配置在服务端的,代码服务的根目录地址就行,比如本地代码是 D:/pro/test 部署在容器里的 /mnt/test, 那就只要映射 D:/pro/test /mnt/test 这一层就可以了,这个目录下的文件xdegbu 会自动拓展映射
  • 然后就可以配置一个php web page的debug 服务了,内容随便填,只要选的那个server 是上面配置好的就行,然后就直接debug,debug 的时候会有一个参数在网页上XDEBUG_SESSION_START=1234, 千万记得,这个参数,要配置到发请求的地方,要放在url 上这个一个cache 的参数
  • 以上就可以debug 了

拓展:

  • 有人喜欢用idekey 来做映射,这个会用到一个参数xdebug.remote_autostart=1
  • 这个参数请注意,他和上面的那个不一样,你可以认为上面的会动态的配置一个 idekey,但这个不会,他会给你写死一个,而且这个ideakey 还要配置在 setting > language > php > Debug > DBGp Proxy 下,但是他不一定能正常链接,而且在你使用了这个参数到时候,上面配置的那个就会失效,所以如果debug 失败的话,看一下是不是多了这么个参数,可以删掉再试试
  • 在查看xdebug 是否正常的时候可以开启日志 xdebug.remote_log=/tmp/xdebug.log
  • 如果连接到了服务并且服务是正常的会有一个Connected to client,但是没有被idea 捕获,那就看看上面的这个问题是否存在,还有就是port 是不是正常的,如果是window 可以看看 端口占用情况 netstat -ano | findstr :9099
http://www.dtcms.com/a/361566.html

相关文章:

  • Elasticsearch面试精讲 Day 4:集群发现与节点角色
  • Ubuntu 22.04 装机黑屏(Nvidia显卡) 安装
  • 如何在 vscode 上用 git 将项目 push 到远程仓库 and 常用Git 命令
  • ubuntu 创建系统服务 开机自启
  • 毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行
  • 【Node.js教程】Express框架入门:从搭建到动态渲染商品列表
  • 数据结构基础--最小生成树
  • MiniCPM-V 4.5实战,实现图片、视频、多图的推理
  • Python 爬虫实战:爬取 B 站视频的完整教程
  • 【RK3576】【Android14】PMIC电源管理
  • 【学Python自动化】 6.1 Python 模块系统学习笔记 (与 Rust 对照)
  • 数据结构:单链表的应用(力扣算法题)第三章
  • Windows 电脑安装dify
  • Go初级之六:接口(Interface)
  • VBA开发者的福音:让代码效率暴涨300%的终极数据结构选择指南
  • git使用详解和实战示例
  • 【学习笔记】从“两个细则”到“四遥”
  • docker安装redis,进入命令窗口基操练习命令
  • KubeBlocks for Milvus 揭秘
  • 学习 Android (十八) 学习 OpenCV (三)
  • 向量数据库概述:Faiss、Milvus、Qdrant、Chroma、Weaviate
  • AI 时代的用户体验设计:设计师会被替代,还是更值钱?
  • TCP连接状态详解/同时打开Simultaneous Open
  • 动态滑动窗口还搞不清?一文搞定动态滑动窗口 | 基础算法
  • 如何将多个Excel报表合并为一个汇总文件?
  • C++ multiset数据结构的使用情况说明
  • [界面通过zmq请求调用指定动态库函数(二)]不同动态库接口不同
  • Unity游戏打包——打包流程
  • 【开题答辩全过程】以 中华美食宝典食谱分享系统的设计与实现为例,包含答辩的问题和答案
  • HTML应用指南:利用GET请求获取MSN财经股价数据并可视化