Phpstorm+Xdebug断点调试

admin 2024年8月7日22:56:57评论26 views字数 2864阅读9分32秒阅读模式

 

对于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

Phpstorm+Xdebug断点调试

提示: 这里暂时不推荐使用Xdebug3.x版本原因如下:

1. 3.0跟2.0的配置参数写法有些不一样,并且并彻底修改了设置参数

2. 如果你phpStorm版本比较低,那么 PhpStorm的检查脚本可能还没有完全更新 使用Xdebug3.x版本集成还有一定的兼容性问题

 

自动分析系统对应的xdebug版本

地址:https://xdebug.org/wizard

将phpinfo()全部信息ctrl+a全部复制粘贴过去系统会自动分析对应的xdebug版本

Phpstorm+Xdebug断点调试

 

0x03:安装xdebug

将下载的xdebug配置文件移动到对应php版本的ext目录下

Phpstorm+Xdebug断点调试

加载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"

Phpstorm+Xdebug断点调试

接着重启apache服务刷新phpinfo()页面出现xdebug则文件加载成功

Phpstorm+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=dbgpxdebug.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 = Onxdebug.profiler_enable = On;xdebug.profiler_output_dir="D:phpstudy_proExtensionstmpxdebug_tmp"xdebug.trace_enable_trigger =Onxdebug.remote_autostart = On

 

0x05:phpstorm配置xdebug

设置-》语言&框架-》PHP-》Debug

Phpstorm+Xdebug断点调试

如果有别的程序占用了9000端口则再修改

接着配置DBGp Proxy

设置-》语言&框架-》PHP-》Debug-》DBGp Proxy

IDE key,host,port都设置php.ini配置中一样的

Phpstorm+Xdebug断点调试

Servers设置

设置-》语言&框架-》PHP-》Servers

右上角+号配置server中的访问路径(域名,或自己配置的站点名)

Phpstorm+Xdebug断点调试

设置完成之后找一段php代码下个断点,开启debug

Phpstorm+Xdebug断点调试

Phpstorm+Xdebug断点调试

代表开启debug

Phpstorm+Xdebug断点调试

代表关闭debug

Phpstorm+Xdebug断点调试

浏览器访问http://localhost/1.php?test=whoami时phpstorm就可以程序断点分析

Phpstorm+Xdebug断点调试

如果没调试成功可能是需要安装一个xdebug helper插件再来调试

 

 Xdebug helper插件概述
每个人都必须拥有使用Xdebug调试,分析和跟踪PHP代码的功能。此扩展将帮助您轻松地启用/禁用调试,性能分析和跟踪,而不必费力地处理POST / GET变量或cookie。对于使用带有Xdebug支持的PHP工具(例如PHPStorm),带PDT的Eclipse,Netbeans和MacGDBp或任何其他Xdebug兼容分析工具(例如KCacheGrind,WinCacheGrind或Webgrind)的PHP开发人员,此扩展非常有用。默认情况下,扩展程序图标将显示在所有页面上,但是为了保持浏览器的整洁,可以将扩展程序配置为仅在设置面板中所需的页面上可见

 

0x06:安装xdebug helper插件

Phpstorm+Xdebug断点调试

浏览器搜索 xdebug helper插件安装

Phpstorm+Xdebug断点调试

安装完插件接着打开插件选项IDE key设置为phpstorm就ok了

Phpstorm+Xdebug断点调试

参考:

https://blog.csdn.net/cangqiong_xiamen/article/details/103034458

 

Phpstorm+Xdebug断点调试

原文始发于微信公众号(LCC316安全实验室):Phpstorm+Xdebug断点调试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月7日22:56:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Phpstorm+Xdebug断点调试https://cn-sec.com/archives/1066903.html

发表评论

匿名网友 填写信息