资讯专栏INFORMATION COLUMN

XDEBUG 从入门到精通

leejan97 / 3513人阅读

摘要:默认关闭如果该设置为,那么将禁用关闭操作符,以便不再隐藏通知警告和错误。将写入垃圾收集统计信息输出的目录,确保将运行的用户具有对该目录的写入权限。此设置确定用于将垃圾回收统计信息转储到的文件的名称。

前言

Xdebug是PHP的扩展,用于协助调试和开发。

它包含一个用于IDE的调试器

它升级了PHP的var_dump()函数

它为通知,警告,错误和异常添加了堆栈跟踪

它具有记录每个函数调用和磁盘变量赋值的功能

它包含一个分析器

它提供了与PHPUnit一起使用的代码覆盖功能。

猿生必备的工具。
但不推荐在生产环境中使用xdebug,因为他太重了。

安装 PECL 安装
pecl install xdebug
zend_extension="/usr/local/php/modules/xdebug.so"
源码包安装

https://xdebug.org/download.php 寻找对应的包

wget xxx.gz
./configure
make && make install
zend_extension="/usr/local/php/modules/xdebug.so"
Docker安装

以下为php dockerfile内部分内容

RUN pecl install xdebug
RUN echo "zend_extension=xdebug.so" >> /usr/local/etc/php/conf.d/xdebug.ini
工作原理

IDE(如PHPStorm)已经集成了一个遵循BGDP的XDebug插件,当开启它的时候, 会在本地开一个XDebug调试服务,监听在调试器中所设置的端口上,默认是9000,这个服务就会监听所有到9000端口的链接。

当浏览器发送一个带 XDEBUG_SESSION_START 的参数的请求到服务器时,服务器接受后将其转到后端的php处理,如果php开启了XDebug模块,则会将debug信息转发到客户端IP的IDE的调试端口上。

当参数或者cookie信息中不带 XDEBUG_SESSION_START ,则不会启动调试。这就为后续在浏览器中添加开关提供了可能。

基本配置

一般情况下,你都只需了解,无需修改。

名称 类型 默认值 注解
xdebug.default_enable boolean 1 堆栈跟踪,默认开启,是xdebug基础功能之一
xdebug.force_display_errors integer 0 默认关闭,如果这个设置设置为1,那么无论PHP的display_errors设置为什么,都将始终显示错误。
xdebug.force_error_reporting integer 0 默认关闭,允许强制显示某些错误
xdebug.halt_level integer 0 默认关闭,设置接收某些指定错误
xdebug.max_nesting_level integer 256 控制无限递归(死循环)的保护机制,默认是256
xdebug.max_stack_frames integer -1 控制有多少堆栈帧显示在堆栈跟踪中,在PHP错误堆栈跟踪的命令行中,以及在浏览器中显示HTML跟踪。
xdebug.scream boolean 0 默认关闭,如果该设置为1,那么Xdebug将禁用@(关闭)操作符,以便不再隐藏通知、警告和错误。

具体内容请移步官网 https://xdebug.org/docs/basic

打印配置

Xdebug将替换PHP的var_dump()函数来显示变量。Xdebug版本包含了不同类型的不同颜色,并对数组元素/对象属性的数量、最大深度和字符串长度进行了限制。还有一些其他函数也处理变量显示。

名称 类型 默认值 注解
xdebug.cli_color integer 0 cli模式下输入结果是否设置颜色
xdebug.overload_var_dump boolean 2 是否允许xdebug重载var_dump函数
xdebug.var_display_max_children integer 128 var_dump 对数组对象子级的显示层数限制
xdebug.var_display_max_data integer 512 var_dump 对结果长度的限制
xdebug.var_display_max_depth integer 3 var_dump 对默认显示嵌套的层数的限制

具体内容请移步官网 https://xdebug.org/docs/display

堆栈跟踪配置

当Xdebug被激活时,当PHP决定显示一个通知、警告、错误等时,它将显示一个堆栈跟踪。堆栈跟踪显示的信息以及它们的显示方式可以配置为适合您的需要。

名称 类型 默认值 注解
xdebug.cli_color integer 0 cli模式下输入结果是否设置颜色
xdebug.collect_includes boolean 1 控制Xdebug是否应该将include()、include_once()、require()或require_once()中的文件名写入跟踪文件
xdebug.collect_params integer 0 该设置默认为0,控制当函数跟踪或堆栈跟踪记录函数调用时,Xdebug是否应该收集传递给函数的参数
xdebug.collect_vars boolean 0 这个设置告诉Xdebug在特定范围内使用哪些变量。由于Xdebug必须逆向工程PHP的操作码数组,这种分析可能相当缓慢。对于使用xdebug.collect_params,此设置不会记录不同变量的值。只有当您希望使用xdebug_get_declared_vars()时,才需要启用此设置。
xdebug.dump.* string empty * 可以是任何COOKIE、文件、GET、POST、REQUEST、SERVER、SESSION。这七个设置控制在发生错误时显示来自超全局变量的哪些数据。
xdebug.dump_globals boolean 1 当该设置设置为true时,Xdebug将添加通过Xdebug.dump配置的超级全局变量的值*到屏幕上的堆栈跟踪和错误日志。
xdebug.dump_once boolean 1 控制是否应该在所有错误情况(设置为0)上转储超全局变量的值,或只在第一个错误情况下转储超全局变量的值(设置为1)
xdebug.dump_undefined boolean 0 如果您想从超全局变量中转储未定义的值,您应该将该设置设置为1,否则将其设置为0。
xdebug.file_link_format string 文件链接格式

具体内容请移步官网 https://xdebug.org/docs/stack...

函数调试配置

Xdebug允许记录所有函数调用,包括参数和以不同格式返回的值。

名称 类型 默认值 注解
xdebug.auto_trace boolean 0 当将此设置设置为ture时,将在脚本运行之前启用函数调用的跟踪
xdebug.collect_assignments boolean 0 该设置默认为0,控制Xdebug是否应该向函数跟踪添加变量赋值。
xdebug.collect_includes boolean 1 该设置默认为1,控制Xdebug是否应该将include()、include_once()、require()或require_once()中的文件名写入跟踪文件。
xdebug.collect_params integer 0 该设置默认为0,控制当函数跟踪或堆栈跟踪记录函数调用时,Xdebug是否应该收集传递给函数的参数。
xdebug.collect_return boolean 0 该设置默认为0,控制Xdebug是否应该将函数调用的返回值写入跟踪文件。
xdebug.show_mem_delta integer 0 Xdebug生成的跟踪文件将显示函数调用之间内存使用的差异
xdebug.trace_format integer 0 跟踪文件的格式
xdebug.trace_options integer 0 当设置为“1”时,跟踪文件将被附加到后面的请求中,而不是被覆盖。
xdebug.trace_output_dir string /tmp 写入跟踪文件的目录,确保PHP运行的用户具有该目录的写权限。

具体内容请移步官网 https://xdebug.org/docs/execu...

垃圾收集统计信息

Xdebug的内置垃圾收集统计信息分析器允许您查明PHP内部垃圾收集器何时触发、它能够清理多少变量、它花费了多长时间以及实际释放了多少内存。

名称 类型 默认值 注解
xdebug.gc_stats_enable bool false 如果启用此设置,则垃圾收集运行的统计信息将自动收集到使用xdebug.gc_stats_output_dir设置的给定目录中, 并使用由xdebug.gc_stats_output_name配置的自动生成的名称。
xdebug.gc_stats_output_dir string /tmp 将写入垃圾收集统计信息输出的目录,确保将运行PHP的用户具有对该目录的写入权限。无法使用ini_set() 在脚本中设置此设置。
xdebug.gc_stats_output_name string gcstats.%p 此设置确定用于将垃圾回收统计信息转储到的文件的名称。该设置使用格式说明符指定格式,与sprintf() 和strftime() 非常相似。有几种格式说明符可用于格式化文件名。

具体内容请移步官网 https://xdebug.org/docs/garba...

远程调试配置

Xdebug为与运行PHP脚本交互的调试器客户机提供了一个接口。

名称 类型 默认值 注解
xdebug.extended_info integer 1 控制Xdebug是否应该为PHP解析器强制执行"extended_info"模式; 这允许Xdebug使用远程调试器执行文件/行断点。在跟踪或分析脚本时,您通常希望关闭此选项,因为PHP生成的oparray将增加大约三分之一的大小,从而减慢脚本速度。无法使用ini_set()在脚本中设置此设置,但只能在php.ini中设置。
xdebug.idekey string complex 控制哪些IDE Key Xdebug应传递给DBGp调试器处理程序。则与客户端通信的key
xdebug.remote_addr_header string "" 该值将用作$SERVER超全局数组中的键,以确定用于查找用于“连接回”的IP地址或主机名的标头
xdebug.remote_autostart boolean 0 您需要使用特定的HTTP GET / POST变量来启动远程调试
xdebug.remote_connect_back boolean 0 如果你不设置ip地址,就只能靠xdebug自己找了,Xdebug将尝试连接到发出HTTP请求的客户端。它检查$_SERVER["HTTP_X_FORWARDED_FOR"]和$_SERVER["REMOTE_ADDR"]变量以找出要使用的IP地址
xdebug.remote_cookie_expire_time integer 3600 设置cookie的生命周期
xdebug.remote_enable boolean 0 是否开启远程调试
xdebug.remote_handler string dbgp 调试的通信协议
xdebug.remote_host string localhost 调试的网络地址,开启了remote_connect_back后,当前配置就无效了
xdebug.remote_log string 调试的日志
xdebug.remote_port integer 9000 调试的端口
xdebug.remote_timeout integer 200 调试的通信链接的等待时间

具体内容请移步官网 https://xdebug.org/docs/remote

官方链接

全部配置请移步官网 https://xdebug.org/docs/all_s...
全部函数请移步官网 https://xdebug.org/docs/all_f...

PHPSTORM DEBUG

网络上的配置DEBUG文章太杂太乱,在PHPSTROM跳来跳去的,实在让人心烦意乱,本章重新整理描述。

配置

其实在PHPSTROM中已经出了很详细的教程,是吧?只不过大部分人都会直接百度/Google,查询是个好习惯,但要视情况而定。

Languages & Frameworks > PHP > Debug

第一步

下载XDEBUG扩展,本章开头已经讲过了,这里不再阐述。
在安装完成后,PHPSTROM提供了验证脚本。脚本地址为 https://gist.github.com/litzi...
正常情况下检测成功的样子是

看到这个你就可以放心的去debug了。

第二步

装个浏览器插件,用户请求监听。这个东西唯一的作用就是方便了debug,正常如果不安装的话你需要通过GET传参 XDEBUG_SESSION_START=ID_KEY 才可以,安装插件后就不需要了。

你可以自行选择是否开启debug,以下为浏览器插件列表

浏览器 下载
Chrome Xdebug Helper
Firefox The easiest Xdebug or Xdebug Helper
Safari Xdebug Toggler
Opera Xdebug launcher
Internet Explorer PhpStorm bookmarklets generator
第三步

开启监听即可。

你可以直接点击图片上的监听按钮。

到现在为止,就配置好了IDE。

第四步

创建DEBUG配置文件,根据每个项目都要配置。这步你跑不了。

你看,PHPSTORM非常人性化,在每一步都会给你出个简单的教程来描述如何配置DEBUG。

添加一个Server和IDE key(xdebug.idekey) 就可以进行调试了。

总结

总结以下IDE配置DEBUG的步骤,实际很简单。

下载安装debug

验证是否通信正常

添加浏览器插件 (可省略)

配置运行文件

愉快的debug

这里还要说明下,如果你是不需要访问本机调试一些类或者代码块,你只需要在本机上安装好XDEBUG,上述配置全部省略,直接点小虫子图标即可调试。DEBUG端口默认是9000,如果配置文件内修改了,当然在IDE内也需要修改下。
调试

介绍下实际DEBUG过程中PHPSTORM面板的按钮都是做什么用的。当你启动监听后,你将会看到如下图

根据上图图标位置,以x,y坐标的方式描述每个图标的功能。

图标 位置 (x,y) 功能
0,0 重新执行DEBUG (Rerun test.php)
0,1 跳转到原调试文件 (Show execution point)
0,2 跳到下一行 (Step over)
0,3 执行下一步 (Step info)
0,4 跳入库、构造函数等方法或类中 (Force Step Info)
0,5 执行函数体或类方法,如果在最外层则结束本次调试 (Step out)
0,6 跳到当前节点的下个断点 (Run to Cursor)
0,7 执行修改变量或返回的结果用于二次调试(Evaluate arbitrary expression)
0,8 显示值的地址 (Show Values Addresses)
0,9 是否显示空的值 , 默认是不显示
0,10 跳到下个断点 (Add method to skip list)
1,0 重新执行DEBUG (Resume Program)
2,0 停止DEBUG(Step process)
3,0 查看和管理所有的断点 ( View and manage all breakpoints)
4,0 忽略所有断点 (Mute breakpoints)
其他 Docker PHP XDEBUG

部分人在本机装了Docker,容器中运行这PHP,这个时候该如何进行DEBUG呢?如果认真看本篇文章,你会发现十分的简单。本身XDEBUG就是远程调试。首先你要保证

容器做了端口映射到本机80

容器内项目目录做了磁盘挂载

将容器PHP XDEBUG 中

xdebug.remote_host=local_ip

即可,也不用担心hosts文件的问题

本机IP = 127.0.0.1 = localhost

这样配置完成后,就可以当容器不存在,与本机调试一样。

致谢

感谢你看到这里,希望本章内容可以帮到你,谢谢。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29402.html

相关文章

  • PHP小知识点

    摘要:那些琐碎的知识点作者记录的的很奇特很难记的知识点。易错知识点整理注意和的区别中和都是输出的作用,但是两者之间还是有细微的差别。今天手头不忙,总结一下,分享过程中掌握的知识点。 深入理解 PHP 之:Nginx 与 FPM 的工作机制 这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的。 PHP 那些琐碎的知识...

    hover_lew 评论0 收藏0
  • 新编html网页设计入门精通 (龙马工作室) pdf扫描版​

    新编html网页设计从入门到精通共分为21章,全面系统地讲解了html的发展历史及4.0版的新特性、基本概念、设计原则、文件结构、文件属性标记、用格式标记进行页面排版、使用图像装饰页面、超链接的使用、使用表格组织页面、使用多媒体美化页面、创建多框架页面、动态网页的制作、使用层叠样式表(css)美化页面、javascript语言、数组和字符串以及表达式与程序的流程控制等内容。 本书适合作为培训学校的...

    荆兆峰 评论0 收藏0
  • Spring Boot入门精通-项目搭建

    摘要:在中,选择填写你的项目的和等项目基本信息之后,在依赖中选择之后。从入门到精通初识注解接口您的关注是我最大的动力 Spring Boot极大的简化了java项目的开发,在之前如果想要开发一个java项目,需要安装tomcat或者其他容器插件。但是Spring Boot内部已经集成了tomcat,因此项目的启动异常的方便。而且Spring Boot的开发中有很多默认的配置,帮助我们省去了相...

    阿罗 评论0 收藏0
  • 爬虫入门精通-网页的解析(正则)

    摘要:本文章属于爬虫入门到精通系统教程第五讲在爬虫入门到精通第四讲中,我们了解了如何下载网页,这一节就是如何从下载的网页中获取我们想要的内容万能匹配文章的标题文字我们要获取的如上所示,假如我们要获取文章的标题这几个文字,那么我们应该怎么做呢我 本文章属于爬虫入门到精通系统教程第五讲 在爬虫入门到精通第四讲中,我们了解了如何下载网页,这一节就是如何从下载的网页中获取我们想要的内容 万能匹配 h...

    RiverLi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<