标签归档:xdebug

(php5.6)phpstorm xdebug远程调试docker中的项目

注意:本文基于php5.6,不同版本的php对应不同版本的xdebug。对应的xdebug配置也不同。

安装xdebug

参考另一篇文章,如何在linux上安装xdebug插件。

修改php.ini文件

开启xdebug扩展,并且配置xdebug配置信息。
注意:不同版本的xdebug配置不同
host.docker.internal 是固定写法

[xdebug]
zend_extension=/www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable = On  
xdebug.remote_handler = dbgp     
xdebug.remote_host= host.docker.internal
xdebug.remote_autostart=1
xdebug.remote_port = 9001
xdebug.idekey = PHPSTORM

按照下图所示步骤即可开启断点调试

配置xdebug的端口为9001
配置DBGp代理监听的端口
配置远程调试和本地文件之间的映射关系
配置服务器信息
点击调试按钮即可开启调试

linux下php8.2安装xdebug

注意

  1. Xdebug是第三方开发商开发的PHP扩展,并不在php源代码中,要到官网下载源码编译安装,不要试图下载php源代码然后像编译其他官方扩展一样编译安装xdebug。

  2. 在linux上安装xdebug非常简单,只需要将phpinfo信息提交到xdebug官网,分析后按照官网的安装不好走一步一步严格执行即可(请注意,严格的一步一步执行,不要跳过或者自己手动抄写命令,我就是因为安装完后大意,将php.ini文件中的zend_extension=xdebug写成了extension=xdebug导致怎么也无法命中调试断点,后来找了很长时间才定位到问题)只要是严格按照步骤走,整个安装过程会非常简单、非常快。

具体安装方法

  1. 执行下方命令,复制输入内容,粘贴到 https://xdebug.org/wizard 中,点击分析按钮,然后严格按照指示的步骤来执行即可。

    php -r 'phpinfo();' > phpinfo.txt
  2. 执行./configure命令时,可能会出现找不到php-config的错误,此文件一般都在php的安装目录下(php-config不是一个第三方的linux软件包,所以请不要试图使用yum install php-config的方法来解决此问题)。执行命令的时候指定php-config的路径即可,如下:

    ./configure  --with-php-config=/www/server/php/82/bin/php-config
  3. 安装完之后,通过查看phpinfo来确定是否已经安装成功。下面是在宝塔中查看phpinfo的结果。

    在phpinfo中查看xdebug插件是否安装成功

配置xdebug的调试环境

本文只讲解如何安装php的xdebug插件,关于配置xdebug的调试环境,请参考另一篇文章,具体讲如何实现使用xdebug远程调试docker中的项目。

xdebug的调试原理

搭建xdebug的调试环境时,经常会出现各种各样的问题导致断点无法命中,调试起来又很麻烦。如果了解xdebug的调试原理的话,可能方便定位问题点。所以这里简单说下xdebug的调试原理。

  1. xdebug和phpstorm(或其他ide)是cs(clint/server)结构的一套体系,他们通过DBGp协议通讯,默认端口是9000,你可以在php.ini配置文件和phpstorm的配置中修改这个端口。xdebug是客户端,phpstorm是服务端。在phpstorm中点击监听按钮,就相当于开启了调试服务,等待xdebug发送调试信息就行啦。

  2. 当php.ini中开启了xdebug扩展,那么当php运行的时候,xdebug就会向服务端发送调试信息,告诉服务端应该如何断点。

了解这个基本原理后,可以顺着调试原理的逻辑思路来判断无法命中断点的具体问题点是出在什么地方。从而准确配置xdebug。