php xdebug的配置、调试、跟踪、调优、分析
本节介绍Xdebug中可用的所有可用配置设置。
相关设置
如果此设置为1,则Xdebug将在CLI模式下和输出为tty时为var_dumps和堆栈跟踪输出着色。在Windows上, 需要安装ANSICON工具。
如果设置为2,则Xdebug将始终为var_dumps和堆栈跟踪着色,无论它是连接到tty还是安装了ANSICON。在这种情况下,您最终可能会看到转义码。
有关更多信息,请参阅此文章。
此设置默认为0,控制Xdebug是否应向函数跟踪添加变量赋值。
从Xdebug 2.6开始,=&
还包括了by-var()赋值。
此设置默认为0,控制Xdebug是否应该在函数跟踪或堆栈跟踪中记录函数调用时收集传递给函数的参数。
该设置默认为0,因为对于非常大的脚本,它可能使用大量内存,因此无法运行巨大的脚本。您可以最安全地打开此设置,但是在脚本中可能会出现一些问题,其中包含大量函数调用和/或大量数据结构作为参数。Xdebug 2不会因内存使用量增加而出现此问题,因为它永远不会将此信息存储在内存中。相反,它只会被写入磁盘。这意味着您需要查看磁盘使用情况。
此设置可以有四个不同的值。对于每个值,显示不同数量的信息。您将在下面看到每个值提供的信息。另请参阅Stack Traces功能的介绍,以 获取一些屏幕截图。
值 | 显示的参数信息 |
---|---|
0 | 没有。 |
1 | 元素的类型和数量(fe string(6),array(8))。 |
2 |
元素的类型和数量,以及完整信息的工具提示1。 |
3 | 完整变量内容(具有xdebug.var_display_max_children,xdebug.var_display_max_data和xdebug.var_display_max_depth设置的限制。 |
4 | 完整的变量内容和变量名称。 |
五 | PHP序列化变量内容,没有名称。(Xdebug 2.3中的新功能) |
1在PHP的CLI版本,它不会有刀尖,也不在输出文件。
此设置默认为0,控制Xdebug是否应将函数调用的返回值写入跟踪文件。
对于计算机化的跟踪文件(xdebug.trace_format = 1),这仅适用于Xdebug 2.3以上版本。
*可以是COOKIE,FILES,GET,POST,REQUEST,SERVER,SESSION中的任何一个。当出现错误情况时,这七个设置控制来自超全局的数据。
这些php.ini设置中的每一个都可以包含来自此超全局转储的变量的逗号分隔列表,或者*
包含所有变量。确保在此设置中不添加空格。
要在发生错误时转储REMOTE_ADDR和REQUEST_METHOD以及所有GET参数,请添加以下设置:
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD xdebug.dump.GET = *
此设置确定在使用文件名的堆栈跟踪显示中生成的链接的格式。这允许IDE设置链接协议,通过单击Xdebug在堆栈跟踪中显示的文件名,可以直接转到行和文件。示例格式可能如下所示:
myide://%F @%L
可能的格式说明符是:
符 | 含义 |
---|---|
%F | 文件名 |
%L | 行号 |
对于各种IDE / OS,有一些说明如何使这项工作:
Linux上的Firefox
- 打开about:config
- 添加一个新的布尔设置“network.protocol-handler.expose.xdebug”并将其设置为“false”
- 将以下内容添加到shell脚本中
~/bin/ff-xdebug.sh
:#!/ bin / sh的 f =`echo $ 1 | cut -d @ -f 1 | sed's / xdebug:\ / \ ///'` l =`echo $ 1 | 切-d @ -f 2`
添加到那个(取决于你是否有komodo,gvim或netbeans):komodo $f -l $l
gvim --remote-tab +$l $f
netbeans "$f:$l"
- 使脚本可执行
chmod +x ~/bin/ff-xdebug.sh
- 将xdebug.file_link_format设置为
xdebug://%f@%l
Windows和netbeans
- 创建文件
netbeans.bat
并将其保存在您的路径中(C:\Windows
将起作用):@echo关闭 setlocal enableextensions enabledelayedexpansion 设置NETBEANS =%1 设置FILE =%~2 %NETBEANS% - nosplash --console suppress --open“%FILE:~19%” nircmd win激活进程netbeans.exe
注意:如果没有,请删除最后一行
nircmd
。 - 将以下代码保存为
netbeans_protocol.reg
:Windows注册表编辑器版本5.00 [HKEY_CLASSES_ROOT \ netbeans的] “网址协议”=“” @ =“URL:Netbeans协议” [HKEY_CLASSES_ROOT \ netbeans的\的DefaultIcon] @ =“\”C:\\ Program Files \\ NetBeans 7.1.1 \\ bin \\ netbeans.exe,1 \“” [HKEY_CLASSES_ROOT \ netbeans的\壳] [HKEY_CLASSES_ROOT \ netbeans的\壳\开放] [HKEY_CLASSES_ROOT \ netbeans的\壳\开放\命令] @ =“\”C:\\ Windows \\ netbeans.bat \“\”C:\\ Program Files \\ NetBeans 7.1.1 \\ bin \\ netbeans.exe \“\”%1 \“”
注意:确保将路径更改为Netbeans(两次),以及
netbeans.bat
批处理文件,如果您将其保存在其他位置C:\Windows\
。 - 双击该
netbeans_protocol.reg
文件将其导入注册表。 - 将xdebug.file_link_format设置为
xdebug.file_link_format = "netbeans://open/?f=%f:%l"
此设置确定Xdebug ...%s%n
通过重载的xdebug_var_dump()(默认值 :)在HTML堆栈跟踪(默认值:)和位置信息中呈现文件名的格式%f
。
此表中列出了可能的格式说明符。示例输出根据完整路径呈现 /var/www/vendor/mail/transport/mta.php
。
符 | 含义 | 示例输出 |
---|---|---|
%一种 | Ancester:两个目录元素和文件名 | mail/transport/mta.php |
%F | 完整路径 | /var/www/vendor/mail/transport/mta.php |
%N | 名称:仅文件名 | mta.php |
%p | 父:一个目录元素和文件名 | transport/mta.php |
%S | 目录分隔符 | \ 在Linux,OSX和其他类Unix系统上,/ 在Windows上 |
如果将此设置设置为,1
则无论PHP的display_errors设置如何,都将始终显示错误 。
此设置是一个位掩码,如error_reporting。该位掩码将与error_reporting to dermine 表示的位掩码逻辑OR运算,应显示错误。此设置只能在php.ini中进行,并允许您强制显示某些错误,无论应用程序使用ini_set()做什么。
此设置允许您配置一个掩码,用于确定是否以及哪些通知和/或警告转换为错误。您可以配置由PHP生成的通知和警告,以及您自己生成的通知和警告(通过trigger_error())。例如,要将strlen()(不带参数)的警告转换为错误,您可以执行以下操作:
ini_set('xdebug.halt_level',E_WARNING); 的strlen(); 回声“嗨!\ n”;
然后,这将导致显示错误消息和脚本的中止。echo "Hi!\n";
不会被执行。
该设置是一个位掩码,因此要将所有通知和警告转换为所有应用程序的错误,您可以在php.ini中设置:
xdebug.halt_level = E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE
位掩码仅支持上面提到的四个级别。
控制无限递归保护的保护机制。此设置的值是在中止脚本之前允许的嵌套函数的最大级别。
在Xdebug 2.6之前,如果超出,这将产生致命的异常。从Xdebug 2.6及更高版本开始,将引发“ 错误 ”异常。
在Xdebug 2.3之前,默认值为100
。
控制堆栈跟踪中显示的堆栈帧数,在PHP错误堆栈跟踪期间在命令行上以及在HTML跟踪的浏览器中显示。
默认情况下,当html_errors php.ini设置为1
或时,Xdebug会使用自己的改进版本重载var_dump()以显示变量 2
。如果你不想这样,你可以将此设置设置为0
,但首先检查是否关闭html_errors并不聪明。
您还可以2
将此设置用作值。除了很好地格式化var_dump()输出外,它还会在输出中添加文件名和行号。该xdebug.file_link_format设置也很尊敬。(Xdebug 2.3中的新功能)
在Xdebug 2.4之前,此设置的默认值为 1
。
.cachegrind.aggregate
。您需要移动此文件以获取另一轮聚合数据。此设置确定用于将跟踪转储到的文件的名称。该设置指定格式说明符的格式,与sprintf()和strftime()非常相似。有几种格式说明符可用于格式化文件名。
有关支持的说明符,请参阅xdebug.trace_output_name文档。
如果启用,则忽略xdebug.remote_host设置,Xdebug将尝试连接到发出HTTP请求的客户端。它检查$ _SERVER ['HTTP_X_FORWARDED_FOR']和$ _SERVER ['REMOTE_ADDR']变量以找出要使用的IP地址。
如果配置了xdebug.remote_addr_header,则将在$ _SERVER ['HTTP_X_FORWARDED_FOR']和$ _SERVER ['REMOTE_ADDR']变量之前检查具有已配置名称的$ SERVER变量。
此设置不适用于通过CLI进行调试,因为$ SERVER标头变量在那里不可用。
请注意,没有可用的过滤器,任何可以连接到Web服务器的人都可以启动调试会话,即使他们的地址与xdebug.remote_host不匹配 。
可以是'php3',它选择旧的PHP 3样式调试器 输出,'gdb',它启用GDB,如调试器接口或'dbgp' - 调试器协议。DBGp协议是唯一受支持的协议。
注意:Xdebug 2.1及更高版本仅支持'dbgp'作为协议。
选择运行调试客户端的主机,您可以使用主机名,IP地址或Unix域套接字的“unix:/// path / to / sock”。如果启用了xdebug.remote_connect_back,则忽略此设置。
Xdebug 2.6中引入了对Unix域套接字的支持。
登录于2007-05-27 14:28:15开放 - > <init xmlns =“urn:debugger_protocol_v1”xmlns:xdebug =“http://xdebug.org/dbgp/x ... ight> </ init> < - step_into -i 1 - > <response xmlns =“urn:debugger_protocol_v1”xmlns:xdebug =“http://xdebug.org/db ...> </ response>
选择启动调试连接的时间。此设置可以有两个不同的值:
- REQ
- 一旦脚本启动,Xdebug将尝试连接到调试客户端。
- JIT
- 一旦出现错误情况,Xdebug将仅尝试连接到调试客户端。
Xdebug在IDE上等待确认传入调试连接的时间量(以毫秒为单位)。在大多数情况下,默认值200 ms应该足够了。如果您经常遇到调试请求丢失,可能是因为您有一个高延迟网络,或远离IDE的开发盒,或者防火墙速度慢,那么您可以增加此值。
请注意,增加此值可能意味着在Xdebug尝试建立连接但您的IDE未侦听时,您的请求似乎“挂起”。
当此设置设置为1时,Xdebug将在引发异常或错误时显示堆栈跟踪 - 即使实际捕获到此异常或错误。
PHP 7中引入了错误“异常”。
跟踪文件的格式。
值 | 描述 |
---|---|
0 | 显示一个人类可读的缩进跟踪文件,其中包括: 时间索引,内存使用情况,内存增量(如果启用了设置xdebug.show_mem_delta),级别,函数名称, 函数参数(如果启用了设置xdebug.collect_params), 文件名和行号。 |
1 | 写一种具有两种不同记录的计算机可读格式。输入堆栈帧并留下堆栈帧有不同的记录。下表列出了每种记录类型中的字段。字段按制表符分隔。 |
2 | 写一个用(简单)HTML格式化的跟踪。 |
计算机化格式的字段:
记录类型 | 1 | 2 | 3 | 4 | 五 | 6 | 7 | 8 | 9 | 10 | 11 | 12 - ...... |
---|---|---|---|---|---|---|---|---|---|---|---|---|
条目 | 水平 | 功能# | 总是'0' | 时间指数 | 内存使用情况 | 功能名称 | 用户定义的(1)或内部函数(0) | 包含/要求文件的名称 | 文档名称 | 电话号码 | 没有。参数 | 参数(与字段11中指定的数量一样多) - 制表符分隔 |
出口 | 水平 | 功能# | 总是'1' | 时间指数 | 内存使用情况 | 空 | ||||||
返回 | 水平 | 功能# | 总是'R' | 空 | 回报价值 | 空 |
有关示例,请参阅功能跟踪的介绍。
此设置确定用于将跟踪转储到的文件的名称。该设置指定格式说明符的格式,与sprintf()和strftime()非常相似。有几种格式说明符可用于格式化文件名。始终会自动添加“.xt”扩展名。
可能的格式说明符是:
符 | 含义 | 示例格式 | 示例文件名 |
---|---|---|---|
%C | 当前工作目录的crc32 | 跟踪%C | trace.1258863198.xt |
%p | PID | 跟踪。%P | trace.5174.xt |
%R | 随机数 | 跟踪。%R | trace.072db0.xt |
%S |
脚本名称2 |
cachegrind.out%S | cachegrind.out._home_httpd_html_test_xdebug_test_php |
%T | 时间戳(秒) | 追查。%T | trace.1179434742.xt |
%u | 时间戳(微秒) | 跟踪。%u | trace.1179434749_642382.xt |
%H | $ _ SERVER [ 'HTTP_HOST'] | 跟踪。%H | trace.kossu.xt |
%R | $ _ SERVER [ 'REQUEST_URI'] | 跟踪。%R | trace._test_xdebug_test_php_var = 1_var2 = 2.xt |
%U | $ _SERVER ['UNIQUE_ID'] 3 | 跟踪。%U | trace.TRX4n38AAAEAAB9gBFkAAAAB.xt |
%S | session_id(如果设置,则来自$ _COOKIE) | 追查。%S | trace.c70c1ec2375af58f74b390bbdd2a679d.xt |
%% | 字面% | 跟踪。%% | 跟踪%%。XT |
2此版本仅适用于自Xdebug 2.6以来的跟踪文件名。
3版本2.2中的新功能。这个是由Apache的mod_unique_id模块设置的
当使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时,控制数组子项的数量和对象的属性。
要禁用任何限制,请使用-1作为值。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
控制使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时显示的最大字符串长度。
要禁用任何限制,请使用-1作为值。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
控制使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时,有多少嵌套级别的数组元素和对象属性。
您可以选择的最大值是1023.您还可以使用-1作为值来选择此最大数字。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
配置举例
php.ini中:
;pecl install xdebug-2.4.1 [xdebug] zend_extension=/usr/local/sinawap/apps/php-cms-5.4.45/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so xdebug.remote_enable = On xdebug.remote_handler = "dbgp" xdebug.remote_host = "10.222.22..."#修改下 xdebug.remote_port = 9000 xdebug.idekey = IDEA xdebug.profiler_output_dir = "/data1/profiler" xdebug.profiler_enable = 0 xdebug.profiler_enable_trigger = 1 xdebug.profiler_enable_trigger_value=SINA_SCP xdebug.trace_enable_trigger = 1 xdebug.trace_enable_trigger_value=SINA_SCP xdebug.trace_output_dir=/data1/profiler xdebug.show_mem_delta=1 xdebug.collect_params=4 xdebug.collect_return=1 xdebug.trace_format=1
配置完成之后重启 php-fpm
安装 xdebug 工具
安装 chrome 扩展 Xdebug helper
启用 Xdebug helper 的 profiler 工具
刷新页面, 查看设定的文件夹
在上边设定的文件夹中会生成 profiler 文件
使用工具来分析 profiler 文件
这里我使用 phpstorm 的分析工具来查看
Tools > Analyze Xdebug Profiler Snapshot
选择生成的 输出文件, 可以看到文件的解析信息, 这个对于分析自己写的php代码会有很大益处
使用IDEA/PHPStorm来debug
设置断点
按红线内设置
RUN->"Start listening for PHP Debug Connection"
选择“Debug”
选择之前 断点的文件
开始 debug
使用Webgrind分析profile
安装、使用: https://github.com/jokkedk/webgrind
本文来自博客园,作者:sunsky303,转载请注明原文链接:https://www.cnblogs.com/sunsky303/p/11556013.html