Xdebug是PHP的扩展,用于协助调试和开发。php
var_dump()
函数猿生必备的工具。
但不推荐在生产环境中使用xdebug,由于他过重了。git
pecl install xdebug zend_extension="/usr/local/php/modules/xdebug.so"
https://xdebug.org/download.php 寻找对应的包github
wget xxx.gz ./configure make && make install zend_extension="/usr/local/php/modules/xdebug.so"
如下为php dockerfile内部份内容web
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端口的连接。chrome
当浏览器发送一个带 XDEBUG_SESSION_START 的参数的请求到服务器时,服务器接受后将其转到后端的php处理,若是php开启了XDebug模块,则会将debug信息转发到客户端IP的IDE的调试端口上。docker
当参数或者cookie信息中不带 XDEBUG_SESSION_START ,则不会启动调试。这就为后续在浏览器中添加开关提供了可能。express
通常状况下,你都只需了解,无需修改。后端
名称 | 类型 | 默认值 | 注解 |
---|---|---|---|
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的步骤,实际很简单。
这里还要说明下,若是你是不须要访问本机调试一些类或者代码块,你只须要在本机上安装好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就是远程调试。首先你要保证
将容器PHP XDEBUG 中
xdebug.remote_host=local_ip
便可,也不用担忧hosts文件的问题
本机IP = 127.0.0.1 = localhost
这样配置完成后,就能够当容器不存在,与本机调试同样。
感谢你看到这里,但愿本章内容能够帮到你,谢谢。