热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于xdebug,phpstorm的二三事

关于xdebug,phpstorm的二三事,Go语言社区,Golang程序员人脉社

Xdebug的工作原理可以总结为下面几个步骤

1)IDE(比如PhpStorm,下文所述的客户端)中已经集成了一个遵循BGDp协议(一个专门用来调试的协议)的Xdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。

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

3)Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉Xdebug,“嘿,我要debug喔,你准备一下”。这时,Xdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。

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

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

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

 

1.下载对应版本的xdebug

xdebug官网下载地址:https://xdebug.org/download.php 

你需要仔细分析和选择要下载的对应版本,否则无法调试。由于非常容易出错,建议采用下面这种简单方法:

xdebug网站提供一个自动分析你系统对应的xdebug版本的页面,网址是  https://xdebug.org/wizard.php

 

图1-1 xdebug网站提供的一个自动分析系统对应xdebug版本的页面

在页面中需要粘贴进去php版本信息,也就是phpinfo()函数的信息,如下图:

图1-2 phpinfo();函数返回的信息

ctrl+A全选这个页面的信息,然后粘贴到第一个图片的页面中。

不知道这个页面如何出现的同学在你的php服务器程序目录下 创建一个phpinfo.php文件,只需一行代码

浏览器中输入 http://127.0.0.1/phpinfo.php 就出现图2 中的页面了。

图1-3 向页面中拷贝phpinfo()获取的信息

 

点击 analyse my phpinfo() output 按钮

 

 

图1-4 找到你需要下载的xdebug版本

 

将下载的DLL文件拷贝到指定目录,按照页面上的提示即可

 

 

图1-5 下载后拷贝到指定目录,并在对应的php.ini中末尾处添加图中第3小点的内容

到此为止,xdebug的下载和启用就完成了,重新运行 phpinfo.php 文件,在打开的页面中出现图1-6则说明安装正确:

 

注意问题

1phpinfo.php需要启动服务器后,通过浏览器访问。

2 php.ini文件中增加的行,等号前后有空格,字符串值可以有引号也可以没有引号。

zend_extension = "E:phpstudyPHPTutorialphpphp-7.0.12-ntsextphp_xdebug-2.7.0alpha1-7.0-vc14-nts.dll"

(这是我本机地址,这里建议直接拷贝图1-5中网页给出的值)

 

2.phpstorm中使用xdebug

2.1修改php配置文件

1. php服务器在本地的情况。(以下配置是我本机的配置,具体情况看个人配置)

在php.ini文件的末尾处追加如下代码:

[XDebug]

xdebug.profiler_output_dir="E:phpstudyPHPTutorialtmpxdebug"

xdebug.trace_output_dir="E:phpstudyPHPTutorialtmpxdebug"

zend_extension="E:phpstudyPHPTutorialphpphp-7.0.12-ntsextphp_xdebug-2.7.0alpha1-7.0-vc14-nts.dll"

;允许收集传递给函数的参数变量

xdebug.collect_params=on

;允许收集函数调用的返回值  

xdebug.collect_return=on

;启用代码自动跟踪  

xdebug.auto_trace=on 

;性能优化,本文用不到,选择关闭(不关闭,会以约每分钟几百M的速度产生大量日志文件,用不上一天你的硬盘就哭了)

xdebug.profiler_enable = Off 

;指定性能分析信息文件的名称

xdebug.profiler_output_name = cachegrind.out.%t.%p

;远程端口,指phpstorm配置的端口

xdebug.remote_port=9000

;指定远程调试的处理协议

xdebug.remote_handler = "dbgp"

;是否允许远程终端,这个必须开启

xdebug.remote_enable = 1

;远程IP地址,就算你phpstorm所在的IP。如果你是在本地的话直接写127.0.0.1就可以了

xdebug.remote_host=127.0.0.1  

;这里是调试器的关键字

xdebug.idekey = PHPSTORM

;子级节点最多显示的的字符数 

xdebug.var_display_max_children=5120

;最多显示的字符数量

xdebug.var_display_max_data=10240

;最多显示的层级

xdebug.var_display_max_depth=6

2 .PHP服务器不是本机

这种情况我还没有试过,以后再补充,大家有做过的可以补充。

 

2.2 phpstorm中的配置

(1)在文件->设置->语言与框架中->PHP->debug 设置端口,端口默认为9000

 

(2)在DBGp Proxy中配置你的idekey,idekey就是你在配置文件中最后一项,host是你的服务器ip或者是已经可以解析的域名,port可以自选,一般默认选80就好了

(3)自己手动添加一个,Host填服务器ip,然后port是默认80端口,如果你修改过,你可以更改成你设置的web端口,debug选xdebug

(4)测试一下配置是否成功

图2-4 创建一个调试服务器,用于与真正服务器同步

(5)测试成功

第一个红线是你的项目在服务器上的地址

第二条红线是你的项目后的斜杠有木有都可以)

 

3调试使用

(1)新建一个运行调试配置

点击“+”,创建一个 PHP Web Application的配置,右侧输入一个用于记忆的名称,选择服务器

(2)打开IDE的debug监听(下图是未开启监听的)

下图是打开监听的

(3)开始调试

红色圆中有个对号,是说明改断点生效了

几点注意

(1)Apache服务器默认的端口是80,按照上面设置就可以了,Nginx默认是8080有URL的地方需要调整一下。URL的组成结构中包括端口号,只是默认值是80,很多时候省略了。

 


推荐阅读
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 1,滤波流程2,图像的金字塔分解(拉普拉斯金字塔)3,金字塔傅里叶频率组合滤波(本文完ÿ ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
author-avatar
大苏打的苏打水
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有