本文主要是介绍xdebug详解及在vscode应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Xdebug在vscode中的应用
优点:仅仅只需在vscode安装php debug
插件,完全零配置,不需要在浏览器端装任何(即不需要担心http会话,浏览器传一些变量参数,设置idekey之类)插件。所需要的只是:打开vscode
打断点后,按F5打开调试按钮运行,然后浏览器访问,再进入代码即可。
php.ini
仅仅只需要开启以下两项配置,其他皆用默认值就够用了(前提安装好了扩展)
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
如果想做性能分析,溯源,调用流程,请参阅xdebug
官网
Xdebug生命周期
-
IDE(比如
vscode
客户端)中已经集成了一个遵循BGDp
的Xdebug
插件。当要debug
的时候,点击一些IDE
的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug
信息。 -
浏览器向
Httpd
服务器发送一个带有XDEBUG_SESSION_START
参数的请求,Httpd收到这个请求之后交给后端的PHP
进行处理(下面就忽略Httpd
,直接把Php
叫做Server
)。 -
Php
看到这个请求是带了XDEBUG_SESSION_START
参数,就告诉Xdebug
,Xdebug
这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug
请求,然后客户端的9000端口响应这个请求,那么debug就开始了。 -
Php
知道Xdebug
已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug
过滤一下。 -
Xdebug
开始过滤代码,Xdebug
在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。 -
相应,客户端(
IDE
)收到Xdebug
发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug
发送下一步应该什么。
Xdebug远程调试分析
- xdebug配合IDE进行可视化调试的过程被称为“远程调试
- 调试时有一个Server(xdebug)和一个Client(IDE),换而言之,
xdebug
在php.ini配置的主机端口其实是客户端ide信息 - xdebug在进行远程调试的时候扮演一个Server的角色,它会在一个指定的端口(默认是9000)等待IDE的连接。
- 通讯协议GDB和DBGp
- DBGp是DBG的取代协议
- 客户端IDE调试 --> 服务端xdebug执行命令 -> PHP程序运行信息返回给ide
- 远程调方式
req
:在PHP程序开始执行的时候,xdebug
与IDE建立连接jit
:在PHP程序执行到断点处或者遇到Error的时候,xdebug
才与IDE建立连接
启动调试器
这部分内容,通常情况下都由ide或浏览器插件已经实现,只需要安装相应插件即可
- 三种方式
- 在命令行中运行脚本,需要设置相应环境变量
- 在浏览器调试脚本,只需要URL添加
XDEBUG_SESSION_START=session_name
参数
替代GET参数也可以设置XDEBUG_SESSTION_START为POST参数,或是COOKIE参数
- 在浏览器运行PHP并激活调试器需安装调试相关浏览器插件
当这些插件激活,它们会直接设置XDEBUG_SESSION的cookie值,代替XDEBUG_SESSION_START。
HTTP调试会话
Xdebug包含使用cookie对浏览器启动跟踪调试会话功能。该工作类似下面步骤:
- 当URL变量
XDEBUG_SESSION_START=name
附加到URL后,或通过POST
传入相同名称值——Xdebug
发出一cookie
值”XDEBUG_SESSION
”而该值为URL参数XDEBUG_SESSION_START
值。Cookie
值有效期为1小时。DBGp协议也会将相同的值在连接到调试客户端时传到初始数据包内的“idekey”属性。 XDEBUG_SESSION_START
或XDEBUG_SESSION cookie
一旦设置,Xdebug
就会尝试连接到调试客户端。- 要停止调试会话(和销毁附带cookie) 只需简单地添加URL参数
XDEBUG_SESSION_STOP
。Xdebug
然后不再尝试创建连接到高度调试客户端。
Xdebug在php.ini
次级配置
//如果开启此,将忽略下面的 xdebug.remote_host 的参数。
// 设置用于开发服务器共享给多名开发者使用
xdebug.remote_connect_back = On
//注意这里是,客户端的ip即IDE的机器的ip
xdebug.remote_host = 192.168.59.104
xdebug.remote_port = 9900 // 默认端口9000,根据自己本机改
xdebug.remote_enable = On //开启调试器
xdebug.remote_handler = dbgp
这篇关于xdebug详解及在vscode应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!