摘要:默认关闭如果该设置为,那么将禁用关闭操作符,以便不再隐藏通知警告和错误。将写入垃圾收集统计信息输出的目录,确保将运行的用户具有对该目录的写入权限。此设置确定用于将垃圾回收统计信息转储到的文件的名称。
前言
Xdebug是PHP的扩展,用于协助调试和开发。
它包含一个用于IDE的调试器
它升级了PHP的var_dump()函数
它为通知,警告,错误和异常添加了堆栈跟踪
它具有记录每个函数调用和磁盘变量赋值的功能
它包含一个分析器
它提供了与PHPUnit一起使用的代码覆盖功能。
猿生必备的工具。
但不推荐在生产环境中使用xdebug,因为他太重了。
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...
网络上的配置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,这个时候该如何进行DEBUG呢?如果认真看本篇文章,你会发现十分的简单。本身XDEBUG就是远程调试。首先你要保证
容器做了端口映射到本机80
容器内项目目录做了磁盘挂载
将容器PHP XDEBUG 中
xdebug.remote_host=local_ip
即可,也不用担心hosts文件的问题
本机IP = 127.0.0.1 = localhost
这样配置完成后,就可以当容器不存在,与本机调试一样。
致谢感谢你看到这里,希望本章内容可以帮到你,谢谢。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29402.html
新编html网页设计从入门到精通共分为21章,全面系统地讲解了html的发展历史及4.0版的新特性、基本概念、设计原则、文件结构、文件属性标记、用格式标记进行页面排版、使用图像装饰页面、超链接的使用、使用表格组织页面、使用多媒体美化页面、创建多框架页面、动态网页的制作、使用层叠样式表(css)美化页面、javascript语言、数组和字符串以及表达式与程序的流程控制等内容。 本书适合作为培训学校的...
摘要:在中,选择填写你的项目的和等项目基本信息之后,在依赖中选择之后。从入门到精通初识注解接口您的关注是我最大的动力 Spring Boot极大的简化了java项目的开发,在之前如果想要开发一个java项目,需要安装tomcat或者其他容器插件。但是Spring Boot内部已经集成了tomcat,因此项目的启动异常的方便。而且Spring Boot的开发中有很多默认的配置,帮助我们省去了相...
摘要:本文章属于爬虫入门到精通系统教程第五讲在爬虫入门到精通第四讲中,我们了解了如何下载网页,这一节就是如何从下载的网页中获取我们想要的内容万能匹配文章的标题文字我们要获取的如上所示,假如我们要获取文章的标题这几个文字,那么我们应该怎么做呢我 本文章属于爬虫入门到精通系统教程第五讲 在爬虫入门到精通第四讲中,我们了解了如何下载网页,这一节就是如何从下载的网页中获取我们想要的内容 万能匹配 h...
阅读 2445·2021-11-15 11:38
阅读 2830·2021-11-02 14:44
阅读 3810·2021-09-26 10:13
阅读 3054·2021-08-13 15:02
阅读 774·2019-08-30 15:56
阅读 1425·2019-08-30 15:53
阅读 2356·2019-08-30 13:01
阅读 3181·2019-08-29 12:57