博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PhpStorm集成xdebug进行断点调试
阅读量:6944 次
发布时间:2019-06-27

本文共 1808 字,大约阅读时间需要 6 分钟。

本文介绍如何使用PhpStorm集成xdebug在本地开发环境进行断点调试的技巧。 我配置的环境是:Windows10 + PhpStorm10.0.1 + PHP5.6。

1. 下载xdebug的扩展,并配置到php.ini

zend_extension = d:\dev\php5.6.28\ext\php_xdebug-2.5.0-5.6-vc11-x86_64.dllxdebug.remote_enable = Onxdebug.remote_host=localhostxdebug.remote_port=9000xdebug.remote_handler=dbgp

第一行是加载xdebug的扩展,路径需根据自己的环境修改。

第二行是开启远程调试;
第三行是配置进行调试的主机地址;
第四行是配置进行调试的主机上面会监听的端口;
第五行是配置调试连接通信使用的协议,这行不配置也没关系,默认值就是dbgp。dbgp跟http一样,是一种通信协议。
根据remote_host跟remote_port,xdebug就知道该把调试连接发送到哪里。

2. 配置PhpStorm中的php解释器

依次点击菜单File-Settings,打开如下菜单:

3. 配置PHP的Debug

以上截图是PhpStorm的默认值,红框部分的Debug port应该与php.ini中的xdebug.remote_port保持一致。所以只有在php.ini中xdebug.remote_port不是9000的时候,才需要去这个地方设置。

至此,PhpStorm应用xdebug的调试环境就已经配置好了。接下来看看如何使用断点调试,方法主要有两种。


方法一:最原始的方法。

1)主动开启PhpStorm对调试端口的监听

在工具栏上找到如图所示的按钮,点一下就开启了。

2)找到合适的代码位置打断点

3)访问对应的请求,并在请求地址后面添加XDEBUG_SESSION_START的参数,如:

访问后就会进入断点:

这个方法中:

第一步的目的是为了让PhpStorm开启对xdebug.remote_port端口的监听,以便接收到xdebug发出的调试请求。
第三步XDEBUG_SESSION_START参数的值可以随意写,它的作用在于开启一个http的调试会话。这个会话类似平常的登录会话一样,xdebug会把这个值写到cookie里面去:
image
只要在http(get或者post)请求中包含XDEBUG_SESSION_START参数或者XDEBUG_SESSION这个cookie中,这个请求就会尝试进入调试环境。只需要在第一次请求调试的时候加上XDEBUG_SESSION_START的参数,接下来一个小时内都不需要再加这个参数。如果想要停止调试,只要把调试端口监听关闭即可:


方法二:跟方法一类似,只不过在第三步的时候,不需要在请求后边手动添加XDEBUG_SESSION_START参数,而是借助浏览器的插件来添加。

如果使用chrome浏览器,可以找到下面这个扩展并安装:

image
安装完成后,在浏览器地址栏旁边就会出现这个插件的小按钮:
           

1)先进入要调试的页面,不加XDEBUG_SESSION_START参数

2)点击刚安装插件的按钮,随意输入Xdebug Key,再点击Set跟Start XDebug Session按钮,页面就会刷新进入调试环境。

这个方法跟方法一本质上没有区别,就是简化了输入XDEBUG_SESSION_START参数的过程而已。


 xdebug进行断点调试的关键在于:xdebug在识别到一个请求需调试的时候,就会用dbgp的协议向remote_host跟remote_port这个地址发送调试请求,当一个位于remote_host上的IDE如PhpStorm正好在监听remote_port这个端口的调试请求时,就能成功接收到调试信息进行调试。

本文演示的是xdebug用于本地调试的场景,实际上xdebug还可应用于远程调试的场景,比如说项目已经上线到了生产环境,通过xdebug的远程调试功能,就能在本地对生产环境的代码进行调试。目前我还没遇到这种调试的需求,所以也没有去尝试这个方式的具体实现过程,我在xdebug官方的文档中看到了类似的介绍,等来将来有必要的时候再来研究吧。

参考:

转载地址:http://ndinl.baihongyu.com/

你可能感兴趣的文章
TiDB 助力一面数据实现消费领域的决策分析平台
查看>>
面试--web安全的理解
查看>>
初次学习 Docker Volume 的基本使用 (四)
查看>>
关于饭局狼人杀app上的12人守卫局的那些事儿
查看>>
Java中的异常处理
查看>>
深入理解ES6之《块级作用域绑定》
查看>>
Solution - 收藏集 - 掘金
查看>>
分享一个可用于拖动排序的vue组件
查看>>
深入解析Vue源码
查看>>
浏览器缓存机制
查看>>
【183天】黑马程序员27天视频学习笔记【Day14-上】
查看>>
2017-06-21 前端日报
查看>>
工作遇到问题的解决方案
查看>>
C学习-函数(三)
查看>>
CentOS 6安装和配置VNC(转)
查看>>
初步接触GraphQL
查看>>
ThinkPHP3.2.3 常见问题(不断更新)
查看>>
Redux概念之三: Action(动作)与Action Creator(动作创建器)
查看>>
【小玩】cc-audiobuffer 一个切片语音拼接工具
查看>>
vuejs 1.x - 实例:搜索过滤
查看>>