写点什么

php 项目使用 xdebug 远程调试

作者:try catch
  • 2021 年 12 月 27 日
  • 本文字数:1806 字

    阅读完需:约 6 分钟

php项目使用xdebug远程调试

0. 目的、原理和调用流程

访问测试环境的页面,在本地开发机打断点调试。相当流弊的功能,方便代码排查原因。


原理:


运行 xdebug 需要客户端 IDE(phpstorm)、远程服务器配合,首先是客户端配置好端口,发送 debug 请求,请求会通过浏览器或者 IDE 的 http 请求,携带特定的参数发送到服务端,服务端收到请求后,发现这是一个 xdebug 请求,则与 IDE 建立 dpgp 连接,当遇到断点时候,返回调试信息给 IDE



  • 服务器的 IP 是 10.0.1.2,端口 80 上有 HTTP

  • IDE 位于未知 IP 上,因此 xdebug.remote_connect_back 设置为 1

  • IDE 侦听端口 9000,因此 xdebug.remote_port 设置为 9000

  • 发出 HTTP 请求,Xdebug 从 HTTP 头中检测 IP 地址

  • Xdebug 连接到端口 9000 上检测到的 IP(10.0.1.42)

  • 调试运行,提供 HTTP 响应


调用流程:



以上内容摘自storyflow的博客,感谢原作者。


好的,搞清楚原理之后,把上面的 Ip、端口号这些统统忘记,以免跟下面演示的 IP、端口搞混。 (搞不清楚就算了,反正也要忘记 ^ _ ^ )现在 我们正式开始一段愉快的学习之旅吧。

1.机器环境:

  1. 本地开发机 windows,只安装了 phpstorm。注意,我本地开发机并没有安装 php.exe 等其他任何开发工具。

  2. 测试服务器 linux, IP 为172.16.249.179, 安装了 php 5.6.0,安装目录在 /opt/remi/php56/root,服务器也安装了 php-fpm/nginx 等所有开发依赖环境。

  3. 此处假设访问域名为 http://test.php.com, 程序已部署到测试服,项目能正常访问。

2.Linux 服务器安装 xdebug 扩展

2.1.下载对应版本的 xdebug 扩展包

  • 最新版本下载地址:https://xdebug.org/download.php

  • 历史版本下载地址:https://xdebug.org/download/historical我下载的是xdebug-2.5.4.tgz这个版本。

2.2.xdebug-2.5.4.tgz上传到服务器的/opt目录下,解压并进入目录:

tar-zxvf xdebug-2.5.4-tgzcd /opt/xdebug-2.5.4
复制代码


2.3.执行 php 安装扩展包的命令

注意:执行此命令的时候,/phpize前面的路径得替换为你机器上的php真实安装路径。


/opt/remi/php56/root/bin/phpize
复制代码


我在执行此命令后报错,原因是没有安装 php-devel 开发工具:



于是先安装 php-dev 工具:


#列出安装包的所有版本yum list | grep php-devel#找到对应版本的安装包,执行安装yum install php56-php-devel.x86_64
复制代码


操作过程如下图:


2.4.重新执行命令

注意:执行此命令的时候,/phpize前面的路径得替换为你机器上的php真实安装路径。


/opt/remi/php56/root/bin/phpize
复制代码

2.5. 编译 xdebug 扩展包

注意:执行此命令的时候,/php-config前面的路径得替换为你机器上的php真实安装路径。


./configure --enable-xdebug --with-php-config=/opt/remi/php56/root/bin/php-config
复制代码


执行成功,再执行:


make && make install
复制代码

2.6. 安装成功后,去 php modules 路径下看看,是否有 xdebug.so 文件:

3. Linux 服务器配置 php.ini

3.1. 在 php.ini 文件中追加参数:

注意:xdebug.remote_port端口号为9009,是指你本地开发机的监听端口号,当然也可以改为其他端口号。


zend_extension="xdebug.so"xdebug.remote_enable=On#本地开发机端口,测试服务器会讲debug信息发送到此端口xdebug.remote_port=9009xdebug.idekey=PHPSTORM#如果开启此remote_connect_back,则忽略xdebug.remote_host的参数xdebug.remote_connect_back = 1xdebug.remote_handler = dbgpxdebug.auto_trace = 1xdebug.remote_log = /tmp/xdebug.log
复制代码

3.2. 配置转发端口 9009

因为 debug session 通讯数据是从 linux 服务器发送到你本地开发机,所以需要配置 ssh 转发通道(ssh tunnel)ssh 工具我用的是 MobaXterm 软件,转发通道配置如下图,你也可以使用 CRT, xshell 等其他工具,原理是相同的。



sshCRT 配置大概是这样的:



  • 远程主机上键入 telnet 命令 telnet 127.0.0.1 9009 检查是否能够访问 9009 端口。

  • 如果有端口冲突可以调整。

  • 如果启动了防火墙firewall-cmd --state,记得开放此端口。

4.本地开发机 phpStorm 配置

4.1. phpStorm debug 配置端口

4.2. dbgp proxy 配置

4.3. servers 配置映射路径 path mappings

4.4. 开启、关闭监听

5. chrome 浏览器安装 xdebug-helper 插件

5.1. 扩展包下载

https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

5.2. 启动 xdebug

安装后你可能需要重启浏览器,此插件才能正常运行。



虫子为绿色即为运行中:



此插件的作用是在 cookie 中设值:


6. 打断点调试

在登录方法打断点,浏览器访问http://test.php.com,可以进入断点:



主要参考资料:https://segmentfault.com/a/1190000016366104https://juejin.cn/post/6844903728193994766

用户头像

try catch

关注

还未添加个人签名 2012.07.23 加入

百尺竿头,更进一步

评论

发布
暂无评论
php项目使用xdebug远程调试