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

本文转载自http://www.softeng.cn/?p=137,本文已获得作者授权,未经作者同意,不可转载。

一、前言

PHP因其是一种解释型语言,所以其在运行时,是由解释器将代码翻译成Opcode,然后再去执行。这样的运行原理导致了PHP无法像C或者C++等编译型语言那样直接通过IDE进行断点调试,这也就导致了在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版本信息
通过以上四个信息,在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扩展就已经成功安装了,接下来,需要在PhpStorm中做相应的配置,以达到实现断点调试的效果。

四、PhpStorm中的配置

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值