前言Xdebug是PHP辅助调试开发的扩展。它包括一个用于IDE的调试器它升级了PHP的var_dump()函数它添加了通知、警告、错误和异常的堆栈跟踪它能够记录每个函数调用和磁盘变量分配它包括一个分析器它提供代码覆盖功能以供使用PHP单元。生活必备的工具。但是不建议在生产环境使用xdebug,因为它太重了。安装PECL安装peclinstallxdebugzend_extension="/usr/local/php/modules/xdebug.so"源码包安装https://xdebug.org/download.php找到对应包wgetxxx.gz./configuremake&&makeinstallzend_extension="/usr/local/php/modules/xdebug.so"Docker安装下面是phpdockerfile的一部分RUNpeclinstallxdebugRUNecho'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模块,调试信息将被转发到客户端IP的IDE的调试端口。当参数或cookie信息中不包含XDEBUG_SESSION_START时,将不会启动调试。这提供了以后在浏览器中添加开关的可能性。一般情况下,只需要了解基本配置,不需要修改。nametypedefaultvalueannotationxdebug.default_enableboolean1stacktrace,默认启用,是xdebug的基本功能之一xdebug.force_display_errorsinteger0默认禁用,如果设置为1,无论PHP的display_errors设置成什么,errors都会总是被显示。xdebug.force_error_reportinginteger0默认关闭,允许强制显示某些错误xdebug.halt_levelinteger0默认关闭,设置接收某些指定的错误xdebug.max_nesting_levelinteger256控制无限递归(infiniteloop)的保护机制,默认为256xdebug。max_stack_framesinteger-1控制在堆栈跟踪、PHP错误堆栈跟踪的命令行以及浏览器HTML跟踪中显示的堆栈帧数。xdebug.screamboolean0默认关闭,如果此设置为1,则Xdebug将禁用@(关闭)运算符,以便不再隐藏通知、警告和错误。详情请访问官网https://xdebug.org/docs/basic打印配置Xdebug会替换PHP的var_dump()函数显示变量。Xdebug版本包括不同类型的不同颜色,并限制数组元素/对象属性的数量、最大深度和字符串长度。还有一些其他函数也可以处理变量显示。名称类型默认值备注xdebug.cli_colorinteger0cli模式下是否设置输入结果的颜色xdebug.overload_var_dumpboolean2是否允许xdebug重载var_dump函数xdebug.var_display_max_childreninteger128var_dump限制数组对象children的显示层数xdebug.var_display_max_datainteger512ger_dump限制结果长度默认显示的嵌套层数限制请参考官网https://xdebug.org/docs/display通知、警告、错误等,它会显示堆栈跟踪。堆栈跟踪显示的信息及其显示方式可以根据您的需要进行配置。名称类型默认值注释xdebug.cli_colorinteger0cli模式下是否设置输入结果的颜色xdebug.collect_includesboolean1控制Xdebug是否将include()、include_once()、require()或require_once()中的文件名写入trace文件xdebug.collect_paramsinteger0该设置默认为0并控制Xdebug是否应在函数跟踪或堆栈跟踪记录函数调用时收集传递给函数的参数。xdebug.collect_varsboolean0此设置告诉Xdebug在特定范围内使用哪些变量。由于Xdebug必须对PHP的操作码数组进行逆向工程,因此这种分析可能会相当慢。对于使用xdebug.collect_params,这个设置不记录不同变量的值。只有在您希望使用xdebug_get_declared_vars()时才需要启用此设置。xdebug.dump.*stringempty*可以是任何COOKIE、文件、GET、POST、REQUEST、SERVER、SESSION。这七个设置控制发生错误时显示来自superglobals的哪些数据。xdebug.dump_globalsboolean1当此设置设置为true时,Xdebug会将通过Xdebug.dump配置的超全局变量的值*添加到屏幕上的堆栈跟踪和错误日志中。xdebug.dump_onceboolean1控制是否应在所有错误情况下转储superglobal的值(设置为0),或仅在第一个错误情况下转储(设置为1)应将该设置设为1,否则设为0。xdebug.file_link_formatstring文件链接格式详情请访问官网https://xdebug.org/docs/stack...功能调试配置Xdebug允许记录所有函数调用,包括不同格式的参数和返回值。名称类型默认注释xdebug.auto_traceboolean0当此设置设置为true时,将在脚本运行之前启用函数调用跟踪xdebug.collect_assignmentsboolean0此设置默认为0并控制Xdebug是否应将变量赋值添加到函数跟踪中。xdebug.collect_includesboolean1此设置默认为1并控制Xdebug是否应将include()、include_once()、require()或require_once()中的文件名写入跟踪文件。xdebug.collect_paramsinteger0此设置默认为0并控制Xdebug是否应在函数跟踪或堆栈跟踪记录函数调用时收集传递给函数的参数。xdebug.collect_returnboolean0此设置默认为0并控制Xdebug是否应将函数调用的返回值写入跟踪文件。xdebug.show_mem_deltainteger0Xdebug生成的跟踪文件会显示函数调用之间的内存使用差异xdebug.trace_formatinteger0跟踪文件的格式xdebug.trace_optionsinteger0当设置为“1”时,跟踪文件将附加到后续请求而不是被覆盖。xdebug.trace_output_dirstring/tmp是写入trace文件的目录,确保运行PHP的用户对该目录有写权限。详情请访问官网https://xdebug.org/docs/execu...GarbageCollectionStatisticsXdebug内置的垃圾收集统计分析器可以让你了解PHP内部的垃圾收集器什么时候触发,能清理多少up变量,花费了多长时间以及实际释放了多少内存。名称类型默认注释xdebug.gc_stats_enableboolfalse如果启用此设置,垃圾收集运行的统计信息将自动收集在给定目录中,该目录由xdebug.gc_stats_output_dir设置并使用由xdebug.gc_stats_output_name配置的自动生成的名称。xdebug.gc_stats_output_dirstring/tmp将写入垃圾收集统计输出的目录,确保将运行PHP的用户对该目录具有写权限。无法使用ini_set()在脚本中设置此设置。xdebug.gc_stats_output_namestringgcstats.%p此设置确定用于将垃圾收集统计信息转储到的文件的名称。此设置使用格式说明符指定格式,很像sprintf()和strftime()。有几种格式说明符可用于格式化文件名。详情请访问官网https://xdebug.org/docs/garba...远程调试配置Xdebug提供了一个与运行的PHP脚本进行交互的调试器客户端接口。NameTypeDefaultsAnnotationxdebug.extended_infointeger1控制Xdebug是否应该为PHP解析器强制执行'extended_info'模式;这允许Xdebug使用远程调试器执行文件/行断点。当跟踪或分析脚本时,您通常希望关闭此选项,因为PHP生成的oparray的大小会增加大约三分之一,从而减慢您的脚本。此设置不能在使用ini_set()的脚本中设置,只能在php.ini中设置。xdebug.idekeystringcomplex控制Xdebug应将哪些IDE键传递给DBGp调试器处理程序。然后键xdebug.remote_addr_headerstring""这个值将用作$SERVER超全局数组中的键来确定标头xdebug.remote_autostartboolean0用??于查找用于“连接回”的IP地址或主机名以使用特定的HTTPGET/POST变量启动远程调试xdebug.remote_connect_backboolean0如果不设置ip地址,则由xdebug自己寻找,Xdebug会尝试连接发出HTTP请求的客户端。它检查$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']变量以找出使用哪个IP地址xdebug.remote_cookie_expire_timeinteger3600设置cookie的生命周期xdebug.remote_enableboolean0启用远程调试xdebug.remote_handlerstringdbgpdebug通信协议xdebug.remote_hoststringlocalhost调试网络地址,启用remote_connect_back后,当前配置将失效xdebug.remote_logstring调试日志xdebug.remote_portinteger9000调试端口xdebug.remote_timeoutinteger200调试通信链路等待时间详情请访问官网https://xdebug.org/docs/remote官方链接所有配置请到官网https://xdebug.org/docs/all_s...所有功能请到官网https://xdebug.org/docs/all_f...PHPSTORMDEBUG配置网络上的DEBUG文章太杂乱,在PHPSTROM里跳来跳去是真烦人,本章重新组织描述。配置其实PHPSTROM里面有很详细的教程吧?只是大多数人会直接上百度/谷歌。多问问是个好习惯,但要视情况而定。Languages&Frameworks>PHP>Debug第一步是下载XDEBUG扩展,本章开头已经提到,这里不再赘述。安装完成后,PHPSTROM提供了验证脚本。脚本地址为https://gist.github.com/litzi...一般情况下,检测成功,看到这里就可以放心去debug了。第二步,安装浏览器插件,用户请求监听。这个东西唯一的作用就是方便调试。如果没有正常安装,需要通过GET方式传递参数XDEBUG_SESSION_START=ID_KEY。安装插件后,您不需要它。您可以选择是否启用调试。以下是浏览器插件列表。浏览器下载ChromeXdebugHelperFirefoxTheeasiestXdebugorXdebugHelperSafariXdebugTogglerOperaXdebuglauncherInternetExplorerPhpStormbookmarkletsgenerator步骤3启用监控。您可以直接点击图片上的监控按钮。至此,IDE已经配置完成。第四步,创建DEBUG配置文件,必须根据每个项目进行配置。您不能运行此步骤。你看,PHPSTORM非常人性化,每一步都会给你一个简单的教程,描述如何配置DEBUG。添加服务器和IDE密钥(xdebug.idekey)进行调试。小结总结一下在下面IDE中配置DEBUG的步骤,其实很简单。下载并安装debug,验证通讯是否正常。添加浏览器插件(可选)配置运行文件。调试愉快。这是另一种解释。如果你不需要访问本地机器来调试一些类或代码块,你只需要在本地机器上安装它。好的XDEBUG,以上配置全部省略,直接点击小bug图标调试即可。默认的DEBUG端口是9000,如果在配置文件中修改,当然也需要在IDE中修改。Debugging介绍PHPSTORM面板上的按钮在实际DEBUG过程中的作用。当您启动监视器时,您将看到每个图标的功能根据下图中图标的位置以x,y坐标描述。图标位置(x,y)函数0、0重新执行DEBUG(Reruntest.php)0、1跳转到原调试文件(Showexecutionpoint)0、2跳到下一行(Stepover)0、3executenextStep(Stepinfo)0,4跳转到library,constructor等方法或类(ForceStepInfo)0,5执行函数体或类方法,如果在最外层,结束本次调试(Stepout)0,6跳转到当前节点的下一个断点(RuntoCursor)0,7执行修改变量或返回结果进行二次调试(Evaluatearbitraryexpression)0,8显示值的地址(ShowValuesAddresses)0,9是否显示空值,默认不显示0,10跳到下一个断点(Addmethodtoskiplist)1,0重新执行DEBUG(ResumeProgram)2,0停止DEBUG(Step进程)3,0查看和管理所有断点(Viewandmanageallbreakpoints)4,0Ignoreallbreakpoints(静音断点)其他DockerPHPXDEBUG有人在他们的本地机器上安装了Docker,并在容器中运行这个PHP。这时候怎么DEBUG呢?如果你仔细阅读这篇文章,你会发现它非常简单。XDEBUG本身就是远程调试。首先你得确定容器已经把端口映射到了本机80,容器里的项目目录已经挂载到磁盘上了。只需在容器PHPXDEBUG中设置xdebug.remote_host=local_ip,就不用担心hosts文件了。LocalIP=127.0.0.1=localhost这样配置后,就可以当容器不存在了,和本机调试一样。致谢感谢您阅读到这里,希望本章的内容对您有所帮助,谢谢。
