Xdebug的安装及使用

news2024/11/16 19:27:26

Xdebug的安装及使用

  • 前言
  • 一、Xdebug如何配置
  • 二、PHPstrom配置
  • 三、Xdebug的使用
      • 1.面板功能解释
      • 2.调试功能详解
  • 四、Xdebug原理


前言

软件调试是泛指重现软件缺陷问题,定位和 查找问题根源,最终解决问题的过程,编写的程序不可能一直不出错,所以调试很重要调试通常有如下两种不同的定义:

  • 定义1:
软件调试是为了发现并排除软件程序中 的错误,可以通过某种方法控制被调试程序的执行过 程,以便随时查看和修改被调试程序执行状态的方法。 在该定义中,软件测试属于软件调试的一部分,与 牛津词典中的调试定义类似。 在牛津词典中调试定义 为:“识别和排除计算机硬件或软件中错误的过程。”
  • 定义2:
调试是执行一次成功的测试之后所要进 行的工作。 所谓成功的测试,是指它可以证明程序没 有实现预期的功能。 调试包含两个步骤,从执行了一个成功测试用例,发现问题后开始;第一步,确定程序 中可疑错误的准确性质和位置;第二步,修改错误。 在该定义中软件测试从调试工作中分离出来。

一、Xdebug如何配置

下载XDebug下载地址:http://www.xdebug.org/必须下载跟机器上安装的php匹配的版本才行。具体下载方法如下:将phpinfo网页的源代码拷贝到http://www.xdebug.org/find-binary.php,然后按照指导安装即可。

  1. 下载Xdebug,要下载与PHP对应版本的Xdebug
    在这里插入图片描述
  2. 把下载的文件放到指定目录
    在这里插入图片描述
  3. 修改php.ini配置文件(在php.ini文件最下面添加如下代码)
[XDebug] 
xdebug.default_enable=1
; 如下三条选项是远程调试配置
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.mode=debug
xdebug.remote_handler=dbgp
xdebug.remote_host="www.loophole.com"  
xdebug.remote_port=9003
xdebug.extended_info=1
xdebug.remote_autostart=1
zend_extension="D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll"
xdebug.idekey="PHPSTORM"

如上修改的位置有两处:xdebug.remote_host="www.loophole.com" ,www.loophole.com为域名信息,可以是任何一个域名,如下所示:

在这里插入图片描述

zend_extension="D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll",D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll就是你Xdebug文件放的位置

Xdebug其他配置如下所示:

[Xdebug]
;指定Xdebug扩展文件的绝对路径
zend_extension="d:/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;启用性能检测分析
xdebug.profiler_enable=on
;启用代码自动跟踪
xdebug.auto_trace=on
;允许收集传递给函数的参数变量
xdebug.collect_params=on
;允许收集函数调用的返回值
xdebug.collect_return=on
;指定堆栈跟踪文件的存放目录
xdebug.trace_output_dir="D:/debug"
;指定性能分析文件的存放目录
xdebug.profiler_output_dir="D:/debug"
xdebug.profiler_output_name = cachegrind.out.%t.%p
备注:在上述配置内容中,zend_extension用于指定Xdebug扩展模块的文件路径(由于Xdebug是基于Zend引擎的扩展,因此必须使用zend_extension配置指令,而不是extension。zend_extension指令的配置路径必须是绝对路径)。之后的6个配置语句是Xdebug的配置参数。
此时,我们重启服务器,通过访问含有phpinfo()函数的PHP文件,即可看到Xdebug模块的相关信息。


3、配置参数选项附录
在上面的Xdebug配置中,我们只配置了6个常用的配置选项。当然,Xdebug还支持更多的配置参数,详情见下表。
配置参数选项

  参数值类型与默认值 参数选项描述
xdebug.auto_trace boolean类型,默认值=0 是否在脚本运行之前自动调用相关追踪函数。
xdebug.cli_color integer类型,默认值=0 该参数自2.2版本开始引入。如果值=1,当处于CLI模式或连接虚拟控制台时,Xdebug将高亮显示var_dumps()和堆栈输出,;在Windows中,这需要安装ANSICON工具。如果值=2,不管是否处于CLI模式或连接虚拟控制台,Xdebug都会高亮显示var_dumps()或堆栈输出;这种情况下,你可能会看到转义后的代码。
xdebug.collect_assignments boolean类型,默认值=0 该参数自2.1版本开始引入。用于控制是否为函数跟踪添加变量赋值功能。
xdebug.collect_includes boolean类型,默认值=1 控制是否在跟踪文件中写入include()、include_once()、require()、require_once()等函数中用到的文件名。
xdebug.collect_params integer类型,默认值=0
控制在调用函数时,是否收集传递给函数的参数信息。如果参数值过大,这可能会占用大量的内存;不过,在Xdebug 2中不会出现该问题,因为Xdebug 2将相关数据写入磁盘中,而不是占用内存。

如果值=0,则不显示任何信息。
如果值=1,只显示类型和大小信息,例如:string(6)、array(8)。
如果值=2,将显示类型和大小,以及全部信息的工具提示。
如果值=3,将显示变量的全部内容。
如果值=4,将显示变量的全部内容和变量名。

xdebug.collect_return boolean类型,默认值=0 控制是否在追踪文件中写入函数调用的返回值。
xdebug.collect_vars boolean类型,默认值=0 控制是否收集指定作用域中的变量信息。由于需要反向工程PHP的操作码数组,因此Xdebug的分析速度可能比较慢。
xdebug.coverage_enable boolean类型,默认值=1 该参数自2.2版本开始引入。控制是否允许通过设置内部结构来启用代码覆盖率功能。
xdebug.default_enable boolean类型,默认值=1 当发生异常或错误时,是否默认显示堆栈信息。
xdebug.dump.* string类型,默认值=Empty 这里的*可以是COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION中的任意一个。用于指定发生错误时是否显示超全局变量数组中的索引变量信息。比如,你想要显示请求的IP地址和请求方式,可以设置为
xdebug.dump.SERVER=REMOTE_ADD,REQUEST_METHOD
多个索引变量用英文逗号隔开,如果要输出其中的所有变量,可以直接用*,例如:
xdebug.dump.GET=*
xdebug.dump_globals boolean类型,默认值=1 控制是否显示通过xdebug.dump.*定义的所有超全局变量的信息。
xdebug.dump_once boolean类型,默认值=1 如果出现多个错误,控制超全局变量信息是在所有错误中显示,还是只在第一个错误中显示。
xdebug.dump_undefined boolean类型,默认值=1 控制是否显示超全局变量中未定义的值。
xdebug.extended_info integer类型,默认值=1 是否强制进入PHP解析器的"extended_info"模式,这将允许Xdebug以远程调试器对文件或行添加断点。开启此模式将拖慢脚本的允许速度,该参数只能在php.ini中设置。
xdebug.file_link_format string类型,默认值=, 自2.2版本开始引入。用于指定堆栈信息中用到的文件名称的链接样式,这允许IDE通过设置链接协议,直接点击堆栈信息中的文件名称,即可快速打开指定的文件。例如:ZendStudio://%f@%l(%f表示文件路径,%f表示行号)。
xdebug.force_display_errors integer类型,默认值=0 自2.3版本开始引入。是否强制显示错误信息。
xdebug.force_error_reporting integer类型,默认值=0 自2.3版本开始引入。是否强制显示所有错误级别的信息。
xdebug.halt_level integer类型,默认值=0 自2.3版本开始引入。指定出现那些错误级别的错误时,中止程序运行。例如:xdebug.halt_level=E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE(也仅支持上述4种错误级别)。
xdebug.idekey string类型,默认值=*complex* 指定传递给DBGp调试器处理程序的IDE Key。
xdebug.manual_url string类型,默认值=http://www.php.net 仅2.2.1以下版本可用,用于指定从函数堆栈和错误信息链接到的帮助手册的基本URL。
xdebug.max_nesting_level integer类型,默认值=100 指定递归的嵌套层级数。
xdebug.overload_var_dump boolean类型,默认值=1 自2.2版本开始引入,当php.ini中的html_error设为1时,Xdebug是否默认使用自身的改进版本来重载var_dump()。
xdebug.profiler_append integer类型,默认值=0 当多个请求映射到相同文件时,指定是覆盖之前的调试信息文件还是追加内容到该文件中。
xdebug.profiler_enable integer类型,默认值=0 指定是否启用Xdebug的性能分析,并创建性能信息文件。
xdebug.profiler_output_dir string类型,默认值=/tmp 指定性能分析信息文件的输出目录
xdebug.profiler_output_name string类型,默认值=cachegrind.out.%p 指定性能分析信息文件的名称
xdebug.remote_enable boolean类型,默认值=0 是否开启远程调试
xdebug.remote_handler string类型,默认值=dbgp 指定远程调试的处理协议
xdebug.remote_host string类型,默认值=localhost 指定远程调试的主机名
xdebug.remote_log string类型,默认值= 指定远程调试的日志文件名
xdebug.remote_mode string类型,默认值=req 可以设为req或jit,req表示脚本一开始运行就连接远程客户端,jit表示脚本出错时才连接远程客户端。
xdebug.remote_port integer类型,默认值=9000 指定远程调试的端口号
xdebug.trace_options integer类型,默认值=0 指定对于之后的请求,追踪文件是追加内容还是覆盖之前内容。
xdebug.trace_output_dir string类型,默认值=/tmp 指定追踪文件的存放目录
xdebug.trace_output_name string类型,默认值=trace.%c 指定追踪文件的名称

二、PHPstrom配置

  1. 首先打开设置选项
    在这里插入图片描述
  2. 添加服务器

在这里插入图片描述
3. DBGP代理设置
在这里插入图片描述
4. 编辑配置
在这里插入图片描述
在这里插入图片描述

三、Xdebug的使用

1.面板功能解释

在这里插入图片描述

2.调试功能详解

在这里插入图片描述

各功能如下所示:

  1. 显示执行点:如果你在看其他行或者其他页面,点击这个按钮就可以跳转到当前代码执行的地方
  2. 步过:一行一行的网下执行code,如果这一行里面有调用其他的方法的话,不会进入该方法里面,只会将该方法对应的值取到。有循环的话会多次执行。
  3. 步入:如果当前行执行了call其他方法,可以进入该方法的内部,一帮用于进入自定义方法,不会进行核心的方法,和步过有细微的区别,注意区分
  4. 强制步入:如果当前行执行了call其他方法,可以进入该方法的内部,查看底层源码的时候可以用这个进入
  5. 步出:退出方法,从进入的方法内退出到方法的调用出,此时方法执行完毕,并且完成赋值,并执行到下一行。
  6. 运行到目前鼠标点击的位置:你可以将鼠标点击到你需要的查看的哪一行,然后使用这个功能,代码就会运行到那一行,而且不需要打上断点
  7. 计算表达式
  8. 继续执行程序,例如在第2行和5行有两个断点,而当前运行至2行,按一下,则运行到下一个断点(即5行
  9. 暂停程序:在程序运行的时候强制停止程序运行
  10. 停止:连续按两下关闭程式,有时候你会发现关闭程式在启动时,说端口被占用,这是因为没有完全关闭调试程序
  11. 查看断点:查看所有的断点信息,如下所示:
    在这里插入图片描述
  12. 启用断点:将所有的断点变为灰色并使它们失效,按继续执行程序可以直接运行完调试程序,再次点击这个按钮可以是所有无效的断点变为有效

四、Xdebug原理

  1. 首先 PhpStorm中已经集成了一个遵循 BGDp 的 Xdebug 插件。当要 debug 的时候, 启动这个插件。该插件会启动一个 9000 的端口监听远程服务器发过来的 debug 信息。(监听端口看是否是Debug)
  2. debug 的时候浏览器向 Httpd 服务器发送一个带有 XDEBUG_SESSION_START 参数的请求,服务器收到这个请求之后交给后端的 PHP(已开启 xdebug 模块)进行处理。
  3. Php 收到的请求是带了 XDEBUG_SESSION_START 参数这时,Xdebug 会向来源 ip 客户端的 9000 端口(默认是 9000 端口)发送一个 debug 请求,然后客户端的 9000 端口响应这个请求,那么 debug 就开始了。
  4. Php 知道 Xdebug 已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让 Xdebug 过滤一下,Xdebug 在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的 9000 端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)
  5. 相应,客户端(IDE)收到 Xdebug 发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向 Xdebug 发送下一步应该什么。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西安阿里云代理商:阿里云服务器的可扩展性和弹性如何?是否支持按需付费?

西安阿里云代理商:阿里云服务器的可扩展性和弹性如何?是否支持按需付费?   一、阿里云服务器的可扩展性   阿里云作为业界知名的云服务提供商,其服务器具有极强的可扩展性。可扩展性主要体现在以下几方面:   1. …

小米note3刷机-从miui12刷回miui9

小米note3刷机-从miui12刷回miui9 文章目录 小米note3刷机-从miui12刷回miui9解除BL锁进入开发者模式遇到的问题解决BootLoader无法连接电脑的问题 导包 3月份原本想买一部小米6回来刷机,结果发现小米6的二手价格有一点点high。然后就选了一个 大平版 小米note3 但是直到昨天…

SpringBoot 如何使用 Logback 进行日志记录

SpringBoot 如何使用 Logback 进行日志记录 在开发 Web 应用程序时,日志记录是非常重要的一部分。日志可以帮助我们跟踪应用程序的运行情况,并帮助我们快速地排查问题。在 SpringBoot 中,我们可以使用 Logback 进行日志记录。Logback 是一款…

F407/103MAP文件

认识MAP文件 MDK编译工程,会生成一些中间文件(如.o、.axf、.map 等),最终生成hex文件,以便下载到MCU上面执行。这些文件分为 11 个类型,其中4种文件比较重要。 比如: 本文主要讲解map文件。 map…

第四章 死锁

目录 一、死锁的概念 1.1 什么是死锁 1.2 死锁、饥饿、死循环的区别 1.2.1 死锁 1.2.2 饥饿 1.2.3 死循环 1.2.4 三者间的异同 1.3 死锁产生的必要条件 1.3.1 互斥条件 1.3.2 不剥夺条件 1.3.3 请求和保持条件 1.3.4 循环等待条件 1.4 什么时候会发生死锁 1.5 …

深入理解Java中的synchronized

文章目录 前言正文一、多线程操作同一数据时的问题二、问题分析三、synchronized 解决问题四、synchronized 是怎么解决问题的五、Java1.6时的优化5.1 自旋锁5.2 自适应锁5.3 锁消除5.4 锁粗化5.5 偏向锁(单线程高效场景)5.2 轻量级锁(多线程…

MySQL数据表查询

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL知识专…

IO、存储、文件系统的简单介绍

目录 一.什么是IO 第一类:存储器IO 第二类:设备IO 二.存储 三:文件系统 总结 一.什么是IO I(input):放入数据 O(output):取出数据 所以我们平时说的IO,实际上就是放入数据和存储数据的意思 在这里,我们一般将IO又分为两大类 第一类:存储器IO 这类IO主要针对的是计算机中…

2023年最新同步网盘排行榜,了解哪些平台适合您的文件同步需求!

在数码领域,同步盘是一个极其受欢迎的工具,它可以帮助人们在不同设备之间共享文件。作为同步盘用户,我们关心的一个很重要的问题就是,在同步盘市场上,哪些同步盘是最好的? 今天我们综合了不同的产品测评网站…

Vulnhub: Corrosion:2靶机

kali:192.168.111.111 靶机:192.168.111.131 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.131 通过nmap脚本枚举出8080端口存在backup.zip文件,下载后解压发现需要密码,利用john爆破压缩包密…

【SSM项目整合流程】

目录 一.用Maven创建一个project项目 1.1新建一个项目,选择Maven然后点击下一步 1.2设置项目名称和AGV后点击完成 1.3在pom.xml文件中导入依赖和配置打包方式 二.添加web工程 2.1在Project Structure中型添加一个web工程 2.2配置web.xml 三.创建SpringMVC的…

2.设置Salesforce开发环境

文章目录 前言1. 关于Salesforce DX环境2. 配置Visual Studio Code2.1 安装CLI2.2 设置Visual Studio Code 3. 创建一个Hello World Lightning web component 来检证开发环境3.1 创建一个Salesforce DX project3.2 将deploy好的组件加到lightning App中 前言 此处解释关于本文…

数据结构——C语言实现常见排序(插入排序、希尔排序、选择排序、堆排序、冒泡排序)

引言: 现在是北京时间2023年6月23日13点19分,度过了一个非常愉快的端午节。由于刚从学校回家,一下子伙食强度直升了个两三个档次。这也导致我的肠胃不堪重负,我也准备等会去健身房消耗一下盈余的热量。回到家陪伴爷爷走人生最后的…

C++11 线程库—线程操作(更新中)

前言 在C11推出线程库前,Windows和Linux操作系统的线程操作并不同,这就导致多线程程序无法跨平台,如果想要跨平台,会很麻烦并且容易出错。C11推出的线程库就解决了这一问题。 因为在Windows和Linux操作系统中有一些独特的常量&am…

OpenGL 鼠标拾取模型

1.简介 在我们的场景中,使用鼠标光标点击或“挑选”一个3d对象是很有用的。一种方法是从鼠标投射3d光线,通过相机,进入场景,然后检查光线是否与任何物体相交。这通常被称为光线投射。 我们不是从局部空间中的网格开始&#xff0c…

gRPC 实践

RPC 包管理,1.12前;旧版本要设置GO111MODULEoff;查找gopath/src;goroot/src;几乎没有包管理; 新版本;go.mod; module xxx go version设置GO111MODULEon 是什么 远程过程调用; …

Windows页面置换算法与文件操作

实验一 一、实验内容或题目: 随机产生页面访问序列,并实现LRU, FIFO, OPT三种算法进行缺页比较 二、实验目的与要求: 1、编写程序,随机产生页面访问序列,并实现LRU, FIFO, OPT三种算法进行缺页比较。 2、理解三种算…

自监督学习简介

1.  自监督学习 自监督学习是可以看做是一种特殊的无监督学习的一个子类别(但并非无监督学习),因为它利用了未标记的数据。 关键思想是让模型无需手动标签即可学习数据表示。一旦模型学会了如何表示数据,那么它就可以用较少量的…

liunx+docker+rabbitmq安装延迟队列插件

安装版本 rabbit: RabbitMQ 3.8.16 erlang: Erlang 23.3.2 rabbit: rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez 准备 1.rabbmitMQ 安装 docker pull rabbitmq 2.rabbmitMQ 启动 docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER用户…

10 种分布式系统必备模式

在当今的技术领域中,分布式系统已成为许多大型应用程序和平台的核心。构建高性能、可伸缩和可靠的分布式系统是一个复杂的挑战,需要合理的架构设计和模式选择。本文将介绍10个必备的分布式系统模式,帮助您更好地理解和应用这些模式以提升系统…