当前位置: 首页 > news >正文

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史:

  • 二十年前流行asp,当时用vb整合常用函数库写了一个dll给asp调用,并在此基础上开发一套仿windows界面的后台管理系统;
  • 后来asp逐渐没落,于是在十多年前转投php,不久后用php写了一套mvc框架,同时参考asp仿windows经验,结合兴起的jQuery重写后台管理系统。这个框架从php4和php5版本开始,陆续更新到现在,并在这个框架和后台上开发了几十套应用产品,目前大部分运行在php4或者php5上依然没问题;
  • 后来golang、python兴起,php也越来越规范化和复杂化。可既然都要求规范化了,那不如直接投奔golang吧…而且vue作为前端,前后分离的模式也开始流行,于是…
  • 直到最近的国产化风向起来了,心想golang会不会因为是谷歌背景而在未来有所顾忌?算了,重新整理一遍php框架,做好准备吧。
  • 因为当时开发框架时就整合了错误报告、日志记录、内存和效率检测等小工具,并且每开发一个核心部件就会测试其运行效率,选择最优解,遇到bug时,最不济用var_dump()die()手动一行行试也能解决大部分问题,所以一直以来几乎没上过Xdebug等工具。
  • 而今天,就在今天,从Xdebug下手吧~~

为什么要写历史呢?难道是快春节了?有点感慨?

在这里插入图片描述

一、概况

Xdebug是PHP的扩展,并且提供了一系列功能来改善 PHP 开发体验。
官网:https://xdebug.org/

1. 步骤调试 (Step Debugging)

一种在执行脚本时在 IDE 或编辑器中单步执行代码的方法。

2. 对 PHP 错误报告的改进(Improvements to PHP’s error reporting)

改进的功能,堆栈跟踪 通知、警告、错误和异常,突出显示代码路径 错误var_dump()

3. 描图(Tracing)

写入每个函数调用,包括参数和调用位置 到磁盘。(可选)还包括每个变量赋值和返回值 每个函数的值。

4. 分析(Profiling)

允许您在可视化工具的帮助下分析 PHP应用程序的性能并找到瓶颈。

5. 代码覆盖率分析(Code Coverage Analysis)

显示运行时执行代码库的哪些部分 使用 PHPUnit 进行单元测试。

二、下载

1. 直接下载

https://xdebug.org/docs/install

  • 选择windows
    在这里插入图片描述
  • 选择download
    在这里插入图片描述
  • 下载
    在这里插入图片描述

2. 导航下载

https://xdebug.org/wizard

由官网分析PHP状态后决定php下载地址。

  • 在php页面中写上
phpinfo();
  • 运行php获得内容
    在这里插入图片描述

  • 复制源代码
    ctrl + u 打开源代码界面,复制相关内容,一般前后有<table></table>标签。
    在这里插入图片描述

  • 黏贴分析
    黏贴至官网导航文本框后点击按钮 Analyse my phpinfo() out 开始分析。
    在这里插入图片描述

  • 下载
    根据分析结果点击其所提供下载
    在这里插入图片描述

三、安装

在这里插入图片描述

1. 放置与更名

根据导航提示,将下载好的Xdebug组件放入php的ext目录中,并将文件更名为 php_xdebug.dll
在这里插入图片描述

2. 修改php.ini

在最后写入一行:

zend_extension = xdebug

3. 重启服务器

  • 重启后浏览器中打开php文件,拉到中后部可看到
    在这里插入图片描述

4. 安装分析

可以参考前面示例,将该页代码中涉及php信息的源代码复制黏贴到向导页面
在这里插入图片描述
得到分析结果
在这里插入图片描述
如果上图红框位置显示版本号,那么恭喜安装成功了。

四、功能

1. Development Helpers 开发助手

将更好处理错误消息,并从PHP的内置中获取更好的信息功能。
使用说明:https://xdebug.org/docs/develop

php.ini中写入开启(默认开启):

xdebug.mode = develop

可以通过 phpinfo() 或者 xdebug_info() 查看是否已开启该功能

在这里插入图片描述

2. Code Coverage Analysis 代码覆盖率分析

代码覆盖率可以了解哪些脚本在请求期间执行。
使用说明:https://xdebug.org/docs/code_coverage

php.ini中写入开启:

xdebug.mode = coverage

3. Garbage Collection Statistics 垃圾回收统计

PHP中的垃圾回收(GC)会对内存和性能产生严重影响,了解它何时被触发以及每次运行的效率如何,借以优化程序。
使用说明:https://xdebug.org/docs/garbage_collection

php.ini中写入开启:

xdebug.mode = gcstats
xdebug.start_with_request = yes

4. Profiling 分析

允许查找脚本中的瓶颈,并使用外部工具将其可视化。
说明:https://xdebug.org/docs/profiler

php.ini中写入开启:

xdebug.mode = profile

5. Step Debugging 步骤调试

允许以交互方式演练代码以调试控制流和检查数据结构。
使用说明:https://xdebug.org/docs/step_debug

php.ini中写入开启:

xdebug.mode = debug

6. Function Trace

允许记录所有函数调用,包括参数,并且以不同格式将值返回给文件
使用说明:https://xdebug.org/docs/trace

php.ini中写入开启:

xdebug.mode = trace

五、VSCode插件

1. 下载插件

在这里插入图片描述

2. 配置

  • 必须打开Xdebug的debug功能,即在php.ini中开启
xdebug.mode = debug
xdebug.start_with_request = yes
  • 在VSCode的调试中激活参数
    在这里插入图片描述

参考

  • Windows安装PHP调试工具Xdebug
  • PHP:使用xdebug profiler 做性能分析
  • windows下全免费手动搭建php8+mysql8开发环境及可视化工具安装
  • PHP开发日志 ━━ IIS7安装PHP8.0及多个版本如何同时存在一台服务器
  • 怎么在VS Code编辑器玩转PHP开发

相关文章:

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史&#xff1a; 二十年前流行asp&#xff0c;当时用vb整合常用函数库写了一个dll给asp调用&#xff0c;并在此基础上开发一套仿windows界面的后台管理系统&#xff1b;后来asp逐渐没落&#xff0c;于是在十多年前转投php&#xff0c;不久后用php写了一套mvc框架&…...

Python - 深夜数据结构与算法之 Two-Ended BFS

目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式&#xff0c;为了提高搜索效率&#xff0c;衍生了剪枝、双向 BFS 以及 A* 即启发式搜索…...

langchain-Agent-工具检索

有时会定义很多工具&#xff0c;而定义Agent的时候只想使用与问题相关的工具&#xff0c;这是可以通过向量数据库来检索相关的工具&#xff0c;传递给Agent # Define which tools the agent can use to answer user queries search SerpAPIWrapper() search_tool Tool(name …...

猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…...

Unity-生命周期函数

目录 生命周期函数是什么&#xff1f; 生命周期函数有哪些&#xff1f; Awake() OnEnable() Start() FixedUpdate() Update() Late Update() OnDisable() OnDestroy() Unity中生命周期函数支持继承多态吗&#xff1f; 生命周期函数是什么&#xff1f; 在Unity中&…...

SQL概述及SQL分类

SQL由IBM上世纪70年代开发出来&#xff0c;是使用关系模型的数据库应用型语言&#xff0c;与数据直接打交道。 SQL标准 SQL92,SQL99&#xff0c;他们分别代表了92年和99年颁布的SQL标准&#xff0c;我们今天使用的SQL语言依旧遵循这些标准。 SQL的分类 DDL&#xff1a;数据定…...

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网&#xff1a;https://code.visualstudio.com/ 下载地址&#xff1a;https://code.visua…...

函数指针和回调函数 以及指针函数

函数指针&#xff08;Function Pointer&#xff09;&#xff1a; 定义&#xff1a; 函数指针是指向函数的指针&#xff0c;它存储了函数的地址。函数的二制制代码存放在内存四区中的代码段&#xff0c;函数的地址它在内存中的开始地址。如果把函数的地址作为参数&#xff0c;就…...

京东年度数据报告-2023全年度游戏本十大热门品牌销量(销额)榜单

同笔记本市场类似&#xff0c;2023年度游戏本市场的整体销售也呈下滑态势。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;京东平台上游戏本的年度销量累计超过350万&#xff0c;同比下滑约6%&#xff1b;销售额将近270亿&#xff0c;同比下滑约11%。 鲸参谋综合了京东…...

秒懂百科,C++如此简单丨第十二天:ASCLL码

目录 必看信息 Everyday English &#x1f4dd;ASCLL码是什么&#xff1f; &#x1f4dd;ASCLL码表 &#x1f4dd;利用ASCLL码实现大写转小写 &#x1f4dd;小试牛刀 总结 必看信息 ▶本篇文章由爱编程的小芒果原创&#xff0c;未经许可&#xff0c;严禁转载。 ▶本篇文…...

Qt6入门教程 4:Qt Creator常用技巧

在上一篇Qt6入门教程 3&#xff1a;创建Hello World项目中&#xff0c;通过创建一个Qt项目&#xff0c;对Qt Creator已经有了比较直观的认识&#xff0c;本文将介绍它的一些常用技巧。 Qt Creator启动后默认显示欢迎页面 创建项目已经用过了&#xff0c;打开项目也很简单&#…...

阴盘奇门八字排盘马星位置计算方法php代码

如下位置&#xff0c;马星的四个位置。 计算方法&#xff1a; 1。先根据出生年月日&#xff0c;计算得八字四柱。比如 2024年01月09日&#xff0c;四柱为 其中时柱地支为“申” 2。然后根据以下对应的数组&#xff0c;来找到id号&#xff0c;即马星位置。 根据下表来找到&am…...

vue3 使用 jsoneditor

vue3 使用 jsoneditor 在main.js中引入 样式文件 import jsoneditor/dist/jsoneditor.css复制代码放到文件中就能用了 jsoneditor.vue <template><div ref"jsonDom" style"width: 100%; height: 460px"></div> </template> <…...

若依前后端分离版使用mybatis-plus实践教程

1、根目录得pom加入依赖 <properties><mybatis-plus.version>3.5.1</mybatis-plus.version> </properties> <dependencies><!-- mp配置--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…...

SpringBoot-Dubbo-Zookeeper

Apache Dubbo&#xff1a;https://cn.dubbo.apache.org/zh-cn/overview/home/ 依赖 <!--dubbo--> <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</versio…...

华为HCIE课堂笔记第十二章 ICMPv6和NDP协议

第十二章 ICMPv6和NDP 12.1 背景 ICMPv6协议用于IPV6协议的消息传递&#xff1a;地址解析、重复地址检测、无状态地址配置、NDP协议、路径MTU发现。 12.2 ICMPv6介绍 ICMPv6的头部字段包含Type字段、Code字段、校验和字段。 消息分为两种&#xff1a; 查错消息&#xff…...

GNSS科研常用相关网站及资源

代码类&#xff1a; Github GitHub: Let’s build from here GitHub 导航相关开源项目 GNSS&#xff1a;RTKLIB、GAMP II-GOOD、GPSTest、GNSSLogger 组合导航&#xff1a;ignav、VINS、Multi_Sensor_Fusion Gitee&#xff08;从Github导入后快速下载库&#xff09; Gi…...

进程的创建与回收学习笔记

目录 一、进程内容&#xff1a; 二、进程常用命令 三、创建子进程 四、子进程进阶 五、进程的退出 六、进程的回收 一、进程内容&#xff1a; 程序&#xff1a; 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程&#xff1a; 执行一个程序所…...

【CCNet】《CCNet:Criss-Cross Attention for Semantic Segmentation》

ICCV-2019 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Experiments on Cityscapess5.3 Experiments on ADE20K5.4 Experiments on COCO 6 Conclusion&#xff08;own&#xff09; 1 Ba…...

Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案

1. 前言 当进行数据库写入或更新时&#xff0c;有时会遇到存在字符串中包含单个双引号或者单引号。 2. 单引号和双引号""作用 在数据库中&#xff0c;字符串常量时需要用一对英文单引号或英文双引号""将字符串常量括起来。 比如&#xff1a; select * …...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...