xdebug详解及在vscode应用

2024-06-12 15:48
文章标签 应用 详解 vscode xdebug

本文主要是介绍xdebug详解及在vscode应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Xdebug在vscode中的应用

优点:仅仅只需在vscode安装php debug插件,完全零配置,不需要在浏览器端装任何(即不需要担心http会话,浏览器传一些变量参数,设置idekey之类)插件。所需要的只是:打开vscode打断点后,按F5打开调试按钮运行,然后浏览器访问,再进入代码即可。
php.ini仅仅只需要开启以下两项配置,其他皆用默认值就够用了(前提安装好了扩展)

xdebug.remote_enable = 1
xdebug.remote_autostart = 1

如果想做性能分析,溯源,调用流程,请参阅xdebug官网

Xdebug生命周期

  1. IDE(比如vscode客户端)中已经集成了一个遵循BGDpXdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。

  2. 浏览器向Httpd服务器发送一个带有XDEBUG_SESSION_START参数的请求,Httpd收到这个请求之后交给后端的PHP进行处理(下面就忽略Httpd,直接把Php叫做Server)。

  3. Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉XdebugXdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。

  4. Php知道Xdebug已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug过滤一下。

  5. Xdebug开始过滤代码,Xdebug在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。

  6. 相应,客户端(IDE)收到Xdebug发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug发送下一步应该什么。

Xdebug远程调试分析

  1. xdebug配合IDE进行可视化调试的过程被称为“远程调试
  2. 调试时有一个Server(xdebug)和一个Client(IDE),换而言之,xdebug在php.ini配置的主机端口其实是客户端ide信息
  3. xdebug在进行远程调试的时候扮演一个Server的角色,它会在一个指定的端口(默认是9000)等待IDE的连接。
  4. 通讯协议GDB和DBGp
  • DBGp是DBG的取代协议
  • 客户端IDE调试 --> 服务端xdebug执行命令 -> PHP程序运行信息返回给ide
  1. 远程调方式
  • 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对浏览器启动跟踪调试会话功能。该工作类似下面步骤:

  1. 当URL变量XDEBUG_SESSION_START=name附加到URL后,或通过POST传入相同名称值——Xdebug发出一cookie值”XDEBUG_SESSION”而该值为URL参数XDEBUG_SESSION_START值。Cookie值有效期为1小时。DBGp协议也会将相同的值在连接到调试客户端时传到初始数据包内的“idekey”属性。
  2. XDEBUG_SESSION_STARTXDEBUG_SESSION cookie 一旦设置,Xdebug就会尝试连接到调试客户端。
  3. 要停止调试会话(和销毁附带cookie) 只需简单地添加URL参数XDEBUG_SESSION_STOPXdebug然后不再尝试创建连接到高度调试客户端。

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应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054652

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所