对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了。不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作。这些都是死的,好说。但是对于Xdebug的工作原理我一直是耿耿于怀,后来看了一篇神文Xdebug断点调试的工作原理详解。
0x01:xdebug原理介绍
Xdebug的工作原理可以总结为下面几个步骤
1:IDE(比如PhpStorm,下文所述的客户端)中已经集成了一个遵循BGDp协议(一个专门用来调试的协议)的Xdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。
2:浏览器向Httpd服务器发送一个带有XDEBUG_SESSION_START参数的请求,Httpd收到这个请求之后交给后端的PHP进行处理(下面就忽略Httpd,直接把Php叫做Server)。
3:Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉Xdebug,“嘿,我要debug喔,你准备一下”。这时,Xdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。
4:Php知道Xdebug已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug过滤一下。
5:Xdebug开始过滤代码,Xdebug在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。
6:相应,客户端(IDE)收到Xdebug发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug发送下一步应该什么。
0x02:下载xdebug
官网下载地址:
https://xdebug.org/download/historical
提示: 这里暂时不推荐使用Xdebug3.x版本原因如下:
1. 3.0跟2.0的配置参数写法有些不一样,并且并彻底修改了设置参数
2. 如果你phpStorm版本比较低,那么 PhpStorm的检查脚本可能还没有完全更新 使用Xdebug3.x版本集成还有一定的兼容性问题
自动分析系统对应的xdebug版本
地址:https://xdebug.org/wizard
将phpinfo()全部信息ctrl+a全部复制粘贴过去系统会自动分析对应的xdebug版本
0x03:安装xdebug
将下载的xdebug配置文件移动到对应php版本的ext目录下
加载xdebug
接着找到php.ini进行编辑
D:phpstudy_proExtensionsphpphp7.1.9ntsphp.ini加载xdebug文件
zend_extension = "D:phpstudy_proExtensionsphpphp7.1.9ntsextphp_xdebug-2.9.8-7.1-vc14-nts-x86_64.dll"
接着重启apache服务刷新phpinfo()页面出现xdebug则文件加载成功
0x04:xdebug 参数配置
[xdebug]
;加载xdebug库文件
zend_extension = "D:phpstudy_proExtensionsphpphp7.1.9ntsextphp_xdebug-2.9.8-7.1-vc14-nts-x86_64.dll"
xdebug.remote_handler=dbgp
xdebug.idekey=PHPSTORM
;开启远程调试
xdebug.remote_enable = On
;远程主机
xdebug.remote_host=localhost
;主机端口
xdebug.remote_port=9000
;开启自动跟踪
xdebug.auto_trace = On
;开启异常跟踪
xdebug.show_exception_trace = On
;开启远程调试自动启动
xdebug.remote_autostart = On
;收集变量
xdebug.collect_vars = On
;收集返回值
xdebug.collect_return = On
;收集参数
xdebug.collect_params = On
;临时跟踪信息输出
;xdebug.trace_output_dir="D:phpstudy_proExtensionstmpxdebug_tmp"
;显示局部变量
xdebug.show_local_vars = On
xdebug.profiler_enable = On
;xdebug.profiler_output_dir="D:phpstudy_proExtensionstmpxdebug_tmp"
xdebug.trace_enable_trigger =On
xdebug.remote_autostart = On
0x05:phpstorm配置xdebug
设置-》语言&框架-》PHP-》Debug
如果有别的程序占用了9000端口则再修改
接着配置DBGp Proxy
设置-》语言&框架-》PHP-》Debug-》DBGp Proxy
IDE key,host,port都设置php.ini配置中一样的
Servers设置
设置-》语言&框架-》PHP-》Servers
右上角+号配置server中的访问路径(域名,或自己配置的站点名)
设置完成之后找一段php代码下个断点,开启debug
代表开启debug
代表关闭debug
浏览器访问http://localhost/1.php?test=whoami时phpstorm就可以程序断点分析
如果没调试成功可能是需要安装一个xdebug helper插件再来调试
Xdebug helper插件概述
每个人都必须拥有使用Xdebug调试,分析和跟踪PHP代码的功能。此扩展将帮助您轻松地启用/禁用调试,性能分析和跟踪,而不必费力地处理POST / GET变量或cookie。对于使用带有Xdebug支持的PHP工具(例如PHPStorm),带PDT的Eclipse,Netbeans和MacGDBp或任何其他Xdebug兼容分析工具(例如KCacheGrind,WinCacheGrind或Webgrind)的PHP开发人员,此扩展非常有用。默认情况下,扩展程序图标将显示在所有页面上,但是为了保持浏览器的整洁,可以将扩展程序配置为仅在设置面板中所需的页面上可见
0x06:安装xdebug helper插件
浏览器搜索 xdebug helper插件安装
安装完插件接着打开插件选项IDE key设置为phpstorm就ok了
参考:
https://blog.csdn.net/cangqiong_xiamen/article/details/103034458
原文始发于微信公众号(LCC316安全实验室):Phpstorm+Xdebug断点调试
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论