资讯专栏INFORMATION COLUMN

IDEA集成xdebug远程调试功能

haobowd / 2531人阅读

摘要:远程调试分为两部分调试客户端和服务端。主动去连接的端口,连接成功后,调试开始。当然,单步调试的另一个好处是可以让初学者快速掌握项目的架构和执行流程。

博客原文链接

在使用php调试代码的时候,我通常都是使用简单暴力的echo之类的输出调试。这种调试方法的效率与个人能力正相关,你加一个echo多数是为了验证自己的一个推测,那么你对代码越熟悉,你推测的就会越准确,bug解决的就越快,相反则往往如无头苍蝇般,东一头西一头,不知所谓地输出一些无意义的调试信息,效率奇低。此时单步调试工具便成了救命稻草,有了它,你可以查看代码执行过程中所有变量的值,心如明镜,解个bug还不手到擒来。对于php,常用的就是xdebug,我这里就简单讲下IDEA里面如何使用xdebug进行代码调试。

安装

我们先把xdebug安装好,由于这里是远程调试,所以xdebug要安装到php运行的服务器上,如果php是在本地环境中,那就直接安装到本地,官方安装文档在这里,我这里简单讲一下Centos 6.6+PHP 5.4的安装方法。

下载并且编译xdebug。
下载链接-xdebug-2.2.7.tgz

wget http://xdebug.org/files/xdebug-2.2.7.tgz
tar zxvf xdebug-2.2.7.tgz
cd xdebug-2.2.7
phpize&make&make install

修改php配置

在php.ini中增加如下一行:
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so

安装完毕!

运行原理

在实际使用前,我们来简单了解xdebug远程调试的原理,这样当xdebug不听话的时候,我们也知道从哪里收拾它。详细文档参见此处。

xdebug远程调试分为两部分:调试客户端和xdebug服务端。前者就是运行我们代码调试器的地方,我这里是IDEA,后者是xdebug运行的地方。当我们尝试使用xdebug进行调试时,客户端会监听一个端口,等待xdebug来连接,一旦连接成功,双方就开始通信,进行代码调试。

图一,源图

图一动态展示了xdebug运行的原理,左边是调试客户端,比如IDEAeclipse之类的IDE,右边是xdebug,运行按照如下步骤进行:

IDE监听一个调试端口,默认是9000,可以自行配置。

用户访问右边php环境的server,我们这里使用浏览器访问,一般IDE会自动帮我们在正常的url后面增加XDEBUG_SESSION_START=name的参数。这个参数是用来通知xdebug主动连接IDE9000端口进行调试的,没有这个参数,xdebug不会去主动连接IDE,调试也就不会触发。

xdebug主动去连接IDE9000端口, 连接成功后,调试开始。

细心的同学可能会问,xdebug是如何知道IDE监听9000端口的呢?好问题,答案就在配置文件里面。xdebug有两个配置:remote_hostremote_port,分别代表IDE的ip地址和监听端口。由此可见,IDExdebug必须协商好监听端口。

另一个问题又来了,端口好办,但是如果我的ip会变化,那我换一个ip,岂不是要修改下xdebug.remote_host配置吗?好麻烦!!!不知道ip没关系,xdebug可以自己知道,只要设置xdebug.remote_connect_back为1就可以了,其运行原理见图二,实现很简单,xdebug可以从http请求的头部获取ip地址,之后就用该ip地址作为remote_host来连接。

图二,源图

php.ini配置

到这里,相信大家已经基本了解xdebug的原理了,本着好记性不如烂笔头的准则,这里把我的配置列一下,方便查阅。

[xdebug]
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
xdebug.remote_connect_back=1
xdebug.remote_enable=1
xdebug.remote_port=9444
xdebug.remote_autostart=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/logs/xdebug/xdebug-profiler"

没讲到的配置,大家自行查阅文档,太懒会变成猪的!!!

IDEA配置

最后一步就是IDEA,也即IDE的配置了。主要有两方面要配置:

其一,监听端口配置,对于IDEA系列,可以在配置中搜索Debug或者xdebug就能迅速定位了,图三是我的配置。

图三

其二,是本地开发路径和远程路径的映射配置,也就是要让本地代码和远程代码可以对应起来。配置位置在项目的Run/Debug Configuration里面,也就是去新建一个调试项目,截图如下。

图四

图五

按照图五中配置好mapping关系后,开始使用xdebug的调试功能吧,告别简单粗暴甚至低效的echo输出调试吧!

后记

使用echo输出调试,很多时候是因为开发者懒,懒得集成调试工具,懒得去优化自己的开发环境。碰到小bug使用echo还行,一旦遇到诡异bug或者复杂的框架,紧紧靠echo已然无能为力。当然,单步调试的另一个好处是可以让初学者快速掌握项目的架构和执行流程。

  

书山有路勤为径,学海无涯苦作舟!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20946.html

相关文章

  • 一文掌握PHP Xdebug 本地与远程调试

    摘要:原文链接一文掌握本地与远程调试很久没写了同样很很久没有用了,近期有个简单的场景要用到,简单记录一下关键步骤。配置与本地调试的配置不一样的地方就是和,其他地方大同小异。 原文链接:一文掌握PHP Xdebug 本地与远程调试 很久没写PHP了、同样很很久没有用XDebug了,近期有个简单的场景要用到,简单记录一下关键步骤。 本地调试 本地环境: $ php -v PHP 7.3.4 (c...

    MrZONT 评论0 收藏0
  • 简要记录下IDEA进行远程调试

    摘要:前言系统体积比较臃肿,本地跑起来太慢,目前都是本地写完代码,提交,然后重新部署开发集成环境,如果测试有问题,再通过远程接入来调试。第一步当然,前提是服务器上要打开远程调试端口,进行的配置。 前言 WMS系统体积比较臃肿,本地跑起来太慢,目前都是本地写完代码,提交,然后重新部署开发集成环境,如果测试有问题,再通过远程接入来调试。所以开发流程就变成 写单元测试写业务代码跑单元测试提交代码,...

    Michael_Ding 评论0 收藏0
  • XDEBUG 从入门到精通

    摘要:默认关闭如果该设置为,那么将禁用关闭操作符,以便不再隐藏通知警告和错误。将写入垃圾收集统计信息输出的目录,确保将运行的用户具有对该目录的写入权限。此设置确定用于将垃圾回收统计信息转储到的文件的名称。 showImg(https://segmentfault.com/img/bVbgEC5?w=480&h=274); 前言 Xdebug是PHP的扩展,用于协助调试和开发。 它包含一个用...

    leejan97 评论0 收藏0
  • PHP开发人员使用工具(个人爱好)

    摘要:管理工具是一款非常好用的管理和开发工具。接口调试开发的一款功能强大的网页调试与发送网页请求。 PHPIDe 我首先力荐PHPstorm10。目前用起来很爽,集成xdebug,集成git进去,当然英文不好的同学在下载个汉化包,在线调试。提供诸于:智能HTML/CSS/JavaScript/PHP编辑、代码质量分析、调试和测试等功能。另外,它还是跨平台。 Mysql管理工具 Navicat...

    Null 评论0 收藏0
  • 容器化开发环境 - 如何断点调试容器中的应用

    摘要:上一篇容器化开发环境已经简单的介绍了如何容器化开发环境。学会断点调试容器中的应用,再也不用为我那乌黑亮丽的头发着急啦原文链接 上一篇容器化开发环境已经简单的介绍了如何容器化开发环境。在开发过程中,很多时候都需要通过断点的方式来调试程序或定位BUG,那么如何断点调试运行在容器中的应用呢??? 容器就像一个虚拟机,就像一个远程的服务器,要断点调试容器中的应用,就像要断点调试虚拟机和远程的服...

    wean 评论0 收藏0

发表评论

0条评论

haobowd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<