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开发

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

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

相关文章

运维开发软件清单

系统工具 WinRARHEU_KMS_Activatorv2rayNTunSafeXshellXFTP右键菜单管理EveryThing 开发工具 PythonGitNotepadVSCodeWindows Terminal PreviewSnipasteNavicat PremiumDBeaverAnother Redis Desktop ManagerRedis Desktop ManagerjqTcpingJDK 8u45PrettyZooPostmanLdapAdmi…

Maven Snapshot版本配置更新远程仓库频率

在 Maven 中&#xff0c;你可以通过配置仓库的更新策略来调整对 Snapshot 版本的处理。Maven 使用更新策略来决定何时检查远程仓库是否有新的快照版本可用。以下是一些常见的 Maven 仓库更新策略配置&#xff1a; always&#xff08;默认&#xff09;&#xff1a;总是检查远程仓…

行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队

当项目的SQL查询慢得像蜗牛爬行时&#xff0c;用户的耐心也在一点点被消耗&#xff0c;作为研发&#xff0c;我们可不想看到这样的事。这篇文章将结合行云部署项目的实践经验&#xff0c;带你走进SQL优化的奇妙世界&#xff0c;一起探索如何让那些龟速的查询飞起来&#xff01;…

C语言学习记录—进阶作业(通讯录文件版本)

通讯录 1. 添加一个函数&#xff0c;在退出通讯录的时候把信息到保存到文件中 2. 添加一个函数&#xff0c;在通讯录打开的时候&#xff0c;可以把文件中的信息加载到通讯录中 contact.h文件 #pragma once #include <string.h> #include <stdio.h> #include <…

乱码问题汇总

写在前面 在工作中经常会碰到各种莫名其妙的乱码问题&#xff0c;但通过之前的学习&#xff1a;字符集&字符编码-CSDN博客 &#xff0c;可以知道乱码的根本原因就是使用和数据源编码不一样的编码解码导致。 如&#xff1a;BIG5解码GB2312编码内容&#xff0c;编解码不一致…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件&#xff0c;界面如下&#xff1a; 如上图&#xff0c;使用非常简单&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09;选择工具-取模板选择一个pdf文件划定自己需要识别的区域&#xff0c;如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

VUE指令(一)

vue会根据不同的指令&#xff0c;针对不同的标签实现不同的功能。指令是带有 v- 前缀的特殊标签属性。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM。 1、v-text&#xff1a;设置元素的文本内容&#xff0c;不会解…

声纳技术24.1.12信号模糊函数-多普勒频移

声纳接收机常采用方法&#xff1a;匹配滤波处理 由于信号的模糊函数与匹配滤波器存在一定联系&#xff0c;因而通过分析信号模糊函数了解声纳系统性能 一、 信号的多普勒频移 多普勒频移&#xff1a;声纳与目标间相对运动使接收信号波形发生改变&#xff0c;表现为信号频率偏…

【LeetCode】206. 反转链表(简单)——代码随想录算法训练营Day01

题目链接&#xff1a;206. 反转链表 题目描述 206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1…

C //练习 4-9 以上介绍的getch与ungetch函数不能正确地处理压回的EOF。考虑压回EOF时应该如何处理?请实现你的设计方案。

C程序设计语言 &#xff08;第二版&#xff09; 练习 4-9 练习 4-9 以上介绍的getch与ungetch函数不能正确地处理压回的EOF。考虑压回EOF时应该如何处理&#xff1f;请实现你的设计方案。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有…

fastadmin 框架如何移除图片上传后预览中的删除按钮

在FastAdmin中&#xff0c;当我们启用了图片上传预览时&#xff0c;在预览区域会自动生成预览图和删除按钮&#xff0c;如下图&#xff1a; 如果我们想上移除掉这里的删除按钮&#xff0c;则需要启用自定义预览模板的功能。 首先我们找到视图中我们的预览容器&#xff0c;比如…

【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?

文章目录 &#x1f680;前言&#x1f680;插入排序&#xff08;insertsort&#xff09;✈️原理✈️代码实现&#xff08;coding&#xff09; &#x1f680;总结&#x1f680;希尔排序&#xff08;shellsort&#xff09;✈️代码实现&#xff08;coding&#xff09;✈️为啥希尔…

创建第一个SpringBoot项目

创建第一个 Spring Boot 项目可以按照以下步骤进行&#xff1a; 1. 使用 IDE&#xff08;如 IntelliJ IDEA 或 Eclipse&#xff09;创建一个新的空项目。 2. 在项目中创建一个新的 Maven 或 Gradle 模块。 3.在 Maven 或 Gradle 模块的配置文件中添加 Spring Boot 的依赖。以…

Fast.ai

网址&#xff1a;https://colab.research.google.com/ https://colab.research.google.com/notebooks/gpu.ipynb#scrollTotMce8muBqXQP 克隆此存储库后&#xff0c;请确保您已 nbdev_install_hooks在终端中运行。这将安装 Jupyter 和 git hooks 以自动清理、信任和修复笔记本中…

c 16*16图片解码

解码的是1616图片&#xff0c;从比特流到Z排序都和验证数据相同。但生成的彩条太离谱。 Jpeg编码已完成&#xff0c;解码不想再完善了&#xff0c;现在已经知道问题错在Y亮度分量的排序上面。此前学jpeg是想搞一个摄像头压缩程序&#xff0c;可现在搞出来2秒才能编码一帧图片&…

Angular - 笔记

文章目录 语法属性绑定引用模板变量组件绑定父组件传子组件 input子组件传父组件 outputEventEmitter ViewChildViewChildren获取子组件对象列表 管道常用模块 函数localStorage实现数据持久化简介使用 参考文档 语法 属性绑定 Angular 的双向绑定语法是方括号和圆括号的组合 …

Unity填坑-灯光烘焙相关

Unity填坑-灯光烘焙相关 文章目录 Unity填坑-灯光烘焙相关前言一、Light的模式二、光的效果分类三、各种Light模式与烘焙的说明1.Realtime,实时光2.baked,烘焙光3.mixed,混合 四、实时全局光五、其他说明1.动态物体的全局光照效果2.手机使用烘焙注意的点3.其他设置 前言 项目组…

GB28181/GB35114平台LiveGBS何如添加白名单,使指定海康、大华、华为等GB28181摄像头或录像机设备可以免密接入

1、什么是GB/T28181级联 协议定义中的解释如下&#xff1a; 级联 cascadednetworking 两个信令安全路由网关之间按照上下级关系连接,上级中心信令控制服务器通过信令安全路由网 关可调用下级中心信令控制服务器所管辖的监控资源,下级中心信令控制服务器通过信令安全路由网 关向…

双指针 之 有效三角形的个数

题目出处&#xff1a;611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09; 思想&#xff1a;利用两条最小的边大于第三条边即为三角形这条定理&#xff0c;利用对撞指针来过滤不合理的 操作1&#xff1a;排序 操作2&#xff1a;固定最大的那条边&#xff0c;设置…

(26)Linux 进程通信之共享内存(共享储存空间)

共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一…