在PhpStorm中通过Xdebug插件实现PHP断点调试

一、前言

PHP因其是一种解释型语言,所以其在运行时,是由解释器将代码翻译成Opcode,然后再去执行。这样的运行原理导致了PHP无法像C或者C++等编译型语言那样直接通过IDE进行断点调试,这也就导致了在PHP的开发中,进行代码调试的困难。

PHP运行流程
PHP运行流程

当然,办法总比困难多。目前在实践中,PHP的调试大多使用编程人员通过自行编写echo、var_dump等变量输出语句或函数,并结合exit、return、continue、break等语句实现,虽然这样也能够达到断点调试类似的效果,但是当需要对循环、多层循环、分支与循环嵌套、函数嵌套等结构进行断点调试时,就会变得极为不便,有可能需要编写大量无用的调试代码才能实现断点效果,所以,很多熟练的PHPer在开发过程中,遇到BUG时,经常会通过“阅读代码+个人经验+猜测”的方式排除BUG,这就形成了一种完全面向经验和面向运气编程的结果,这样对代码进行调试,也是完全不可取的,这样容易造成逻辑上的漏洞。本文所讲的,将是通过Xdebug,在PhpStorm中,实现PHP代码语句级的在线断点调试功能。

二、Xdebug介绍

Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
Xdebug作为PHP调试工具,同时也是PHP的一个扩展,其用于协助调试和开发。它包含一个用于IDE的单步调试器;它升级了PHP的var_dump()函数; 它为通知,警告,错误和异常添加堆栈跟踪 ; 它具有记录每个函数调用和变量赋值给磁盘的功能; 它包含一个分析器 ; 它提供了用于PHPUnit的代码覆盖功能。

三、安装Xdebug

前文已经说到了,Xdebug本质上是一个PHP的扩展,所以其安装步骤与其他PHP的安装步骤类似。
首先,打开Xdebug的官网https://xdebug.org/,根据自己的PHP版本(可通过phpinfo函数查看),下载对应的Xdebug扩展。以我本地环境为例,我的PHP版本是5.5.24(32位)线程安全,编译器为MSVC11,这里需要注意,版本、架构、编译器、线程安全均不能错。

查看PHP版本信息
查看PHP版本信息

通过以上四个信息,在Xdebug下载页面找到对应的Xdebug扩展并下载。

下载Xdebug扩展
下载Xdebug扩展

下载所得的php_xdebug-2.5.5-5.5-vc11.dll扩展文件,放入php的扩展目录,一般情况下,该目录的位置为php安装目录下的ext目录。
其次,打开PHP的配置文件php.ini在文件末尾增加如下代码,打开Xdebug扩展。

[XDebug]
zend_extension = "D:\LearningSoftware\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=On
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

如果是Apche+PHP运行方式,则重启Apache,如果是Nginx+PHP运行方式,则重启php-fpm,然后使用phpinfo函数查看,应该可以在Xdebug扩展的启用信息。

Xdebug启用信息
Xdebug启用信息

通过以上两步操作,Xdebug扩展就已经成功安装了,接下来,需要在PhpStorm中做相应的配置,以达到实现断点调试的效果。

四、PhpStorm中的配置

PhpStorm中的配置也很简单,主要是两步,第一步设置Xdebug的端口,第二步是给具体的每一个项目设置Web服务器配置。
首先,通过菜单File->Settings进入设置界面,可在搜索框中输入xdebug进行快速定位,然后进行如下配置,这里一般默认都是配置好的。需要特别说明一下,如果当前机器的9000端口已被其他进程占用,则可以修改为其他端口号,但是这里的端口号需要与前文中php.ini中配置的端口号相同。

Xdebug在Phpstorm中的配置
Xdebug在Phpstorm中的配置

其次,打开某一个具体要进行断点调试的项目,如果当前项目没有配置调试参数的话,那么右上角的运行、调试等按钮为灰色,且不可点击,若配置了,则可以点击。
现在对当前项目进行配置,点击PhpStorm右上角的下拉按钮,点击“Edit Configurations”,在弹出的对话框中,点击左上角的“+”按钮,选择“PHP Web Application”,将Name设置为项目名称,点击Server后面的“+”按钮,在Servers对话框中,点击左上角的“+”按钮,将Name设置为项目名称,将host改为127.0.0.1或者您在本地映射的虚拟域名,端口号改为您的Web服务器(Apche或Nginx等)启动的端口号(默认为80),Debugger选择为Xdebug,保存以上的这些配置即可。

未配置时的状态
增加Web Application
配置Web Application
配置Server
在Web Application中选择Server

最后,在PhpStorm中,单击某行前面的空白处,即可设置断点,断点设置好后,点击右上角的“Debug”按钮,即可启动断点调试,程序运行到断点处时,便会停在该处,等待下一步操作。

设置断点

具体断点触发效果如下图所示,可以看到与其他IDE的断点调试功能类似,可以看到所有变量当前的值,函数调用栈等信息,也可以针对特定变量设置Watch等操作,还可以单步执行、过程执行等。

触发断点

至此,我们就实现了在PhpStorm通过Xdebug扩展实现断点调试的功能,这一功能的实现,将大大提高PHPer调试BUG的效率和准确率。

希望本文能对有需要的PHPer提供帮助。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据