xdebug 的 profiler 是一个强大的工具,它能分析 PHP 代码,探测瓶颈,或者通常意义上来说查看哪部分代码运行缓慢以及可以使用速度提升。Xdebug 2 分析器输出一种兼容 cachegrind 文件格式的分析信息。这允许你能使用出色的 KCacheGrind 工具(Linux,KDE)来分析你的 profiling 数据。在 Linux 可以使用你最喜欢的包管理器安装 KCacheGrind。
在 windows 系统上,有预编译的 QCacheGrind 二进制程序(QCacheGrind 是没有 KDE 绑定的 KCacheGrind)。
在 Mac OSX 系统上,这里也有怎样安装 QCacheGrind 的说明。
Windows 用户可以选择性的使用 WinCacheGrind。它的功能不同于 KCacheGrind,所以 这个页面的 KCacheGrind 使用文档章节不适用于这个程序。WinCacheGrind 目前不支持 Xdebug 2.3 引入的 cachegrind 文件格式的的文件和函数压缩。
这也有一种可替代 profile 信息演示的工具叫做 xdebugtoolkit。一款基于 web 前端叫做 Webgrind,和一款基于 java 的工具叫做 XCallGraph。
如果你不能使用 KDE(或者不想使用 KDE)的 kcachegrind 包,可以用 perl 脚本 "ct_annotate",它能从分析器跟踪文件生成 ASCII 输出。
本节介绍Xdebug中可用的所有可用配置设置。
相关设置
xdebug.auto_trace
类型:布尔值,默认值:0
当此设置设置为on时,将在脚本运行之前启用函数调用的跟踪。这使得跟踪auto_prepend_file中的代码成为可能。
xdebug.cli_color
类型:整数,默认值:0,在Xdebug> = 2.2中引入
如果此设置为1,则Xdebug将在CLI模式下和输出为tty时为var_dumps和堆栈跟踪输出着色。在Windows上, 需要安装ANSICON工具。
如果设置为2,则Xdebug将始终为var_dumps和堆栈跟踪着色,无论它是连接到tty还是安装了ANSICON。在这种情况下,您最终可能会看到转义码。
有关更多信息,请参阅此文章。
xdebug.collect_assignments
类型:布尔值,默认值:0,在Xdebug> = 2.1中引入
此设置默认为0,控制Xdebug是否应向函数跟踪添加变量赋值。
从Xdebug 2.6开始,=&
还包括了by-var()赋值。
xdebug.collect_includes
类型:布尔值,默认值:1
此设置默认为1,控制Xdebug是否应将include(),include_once(),require()或require_once()中使用的文件名写入跟踪文件。
xdebug.collect_params
类型:整数,默认值:0
此设置默认为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版本,它不会有刀尖,也不在输出文件。
xdebug.collect_return
类型:布尔值,默认值:0
此设置默认为0,控制Xdebug是否应将函数调用的返回值写入跟踪文件。
对于计算机化的跟踪文件(xdebug.trace_format = 1),这仅适用于Xdebug 2.3以上版本。
xdebug.collect_vars
类型:布尔值,默认值:0
此设置告诉Xdebug收集有关在特定范围内使用哪些变量的信息。由于Xdebug必须对PHP的操作码阵列进行反向工程,因此这种分析可能非常缓慢。此设置不会记录不同变量具有的值,使用xdebug.collect_params。仅当您希望使用xdebug_get_declared_vars()时,才需要启用此设置 。
xdebug.coverage_enable
类型:布尔值,默认值:1,在Xdebug> = 2.2中引入
如果此设置设置为0,则Xdebug将不会设置内部结构以允许代码覆盖。这大大加快了Xdebug的速度,但当然,Code Coverage Analysis不起作用。
xdebug.default_enable
类型:布尔值,默认值:1
如果此设置为1,则默认情况下将在错误事件中显示stacktraces。您可以使用xdebug_disable()禁用代码中的 堆栈跟踪。由于这是Xdebug的基本功能之一,建议将此设置保留为1。
xdebug.dump。*
类型:字符串,默认值:空
*可以是COOKIE,FILES,GET,POST,REQUEST,SERVER,SESSION中的任何一个。当出现错误情况时,这七个设置控制来自超全局的数据。
这些php.ini设置中的每一个都可以包含来自此超全局转储的变量的逗号分隔列表,或者*
包含所有变量。确保在此设置中不添加空格。
要在发生错误时转储REMOTE_ADDR和REQUEST_METHOD以及所有GET参数,请添加以下设置:
xdebug.dump_globals
类型:布尔值,默认值:1
当此设置设置为时true
,Xdebug会将通过xdebug.dump。*配置的超级全局变量的值添加到屏幕上的堆栈跟踪和错误日志(如果已启用)。
xdebug.dump_once
类型:布尔值,默认值:1
控制是否应该在所有错误情况(设置为0)或仅在第一个(设置为1)上转储超全局的值。
xdebug.dump_undefined
类型:布尔值,默认值:0
如果要从超全局转储未定义的值,则应将此设置设置为1,否则将其设置为0。
xdebug.extended_info
类型:整数,默认值:1
控制Xdebug是否应该为PHP解析器强制执行'extended_info'模式; 这允许Xdebug使用远程调试器执行文件/行断点。在跟踪或分析脚本时,您通常希望关闭此选项,因为PHP生成的oparray将增加大约三分之一的大小,从而减慢脚本速度。无法使用ini_set()在脚本中设置此设置,但仅在php.ini中设置。
xdebug.file_link_format
类型:字符串,默认值:,在Xdebug中引入> = 2.1
此设置确定在使用文件名的堆栈跟踪显示中生成的链接的格式。这允许IDE设置链接协议,通过单击Xdebug在堆栈跟踪中显示的文件名,可以直接转到行和文件。示例格式可能如下所示:
可能的格式说明符是:
符 | 含义 |
%F | 文件名 |
%L | 行号 |
对于各种IDE / OS,有一些说明如何使这项工作:
Linux上的Firefox
- 打开about:config
- 添加一个新的布尔设置“network.protocol-handler.expose.xdebug”并将其设置为“false”
- 将以下内容添加到shell脚本中
~/bin/ff-xdebug.sh
:
- 添加到那个(取决于你是否有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
将起作用):
注意:如果没有,请删除最后一行nircmd
。
- 将以下代码保存为
netbeans_protocol.reg
:
注意:确保将路径更改为Netbeans(两次),以及netbeans.bat
批处理文件,如果您将其保存在其他位置C:\Windows\
。
- 双击该
netbeans_protocol.reg
文件将其导入注册表。 - 将xdebug.file_link_format设置为
xdebug.file_link_format = "netbeans://open/?f=%f:%l"
xdebug.filename_format
类型:字符串,默认值:...%s%n,在Xdebug中引入> = 2.6
此设置确定Xdebug ...%s%n
通过重载的xdebug_var_dump()(默认值 :)在HTML堆栈跟踪(默认值:)和位置信息中呈现文件名的格式%f
。
此表中列出了可能的格式说明符。示例输出根据完整路径呈现 /var/www/vendor/mail/transport/mta.php
。
符 | 含义 | 示例输出 |
%一种 | Ancester:两个目录元素和文件名 | |
%F | 完整路径 | |
%N | 名称:仅文件名 | |
%p | 父:一个目录元素和文件名 | |
%S | 目录分隔符 | |
xdebug.force_display_errors
类型:int,默认值:0,在Xdebug中引入> = 2.3
如果将此设置设置为,1
则无论PHP的display_errors设置如何,都将始终显示错误 。
xdebug.force_error_reporting
类型:int,默认值:0,在Xdebug中引入> = 2.3
此设置是一个位掩码,如error_reporting。该位掩码将与error_reporting to dermine 表示的位掩码逻辑OR运算,应显示错误。此设置只能在php.ini中进行,并允许您强制显示某些错误,无论应用程序使用ini_set()做什么。
xdebug.halt_level
类型:int,默认值:0,在Xdebug中引入> = 2.3
此设置允许您配置一个掩码,用于确定是否以及哪些通知和/或警告转换为错误。您可以配置由PHP生成的通知和警告,以及您自己生成的通知和警告(通过trigger_error())。例如,要将strlen()(不带参数)的警告转换为错误,您可以执行以下操作:
然后,这将导致显示错误消息和脚本的中止。echo "Hi!\n";
不会被执行。
该设置是一个位掩码,因此要将所有通知和警告转换为所有应用程序的错误,您可以在php.ini中设置:
位掩码仅支持上面提到的四个级别。
xdebug.idekey
类型:字符串,默认值:* complex *
控制哪些IDE Key Xdebug应传递给DBGp调试器处理程序。默认值基于环境设置。首先查阅环境设置DBGP_IDEKEY,然后是USER和最后一个USERNAME。默认设置为找到的第一个环境变量。如果找不到任何设置,则设置为默认值''。如果设置了此设置,它将始终覆盖环境变量。
xdebug.manual_url
类型:字符串,默认值:http://www.php.net,在Xdebug <2.2.1中引入
这是从函数跟踪和错误消息到消息中函数的手册页的链接的基本URL。建议将此设置设置为使用最近的镜像。
xdebug.max_nesting_level
类型:整数,默认值:256
控制无限递归保护的保护机制。此设置的值是在中止脚本之前允许的嵌套函数的最大级别。
在Xdebug 2.6之前,如果超出,这将产生致命的异常。从Xdebug 2.6及更高版本开始,将引发“ 错误 ”异常。
在Xdebug 2.3之前,默认值为100
。
xdebug.max_stack_frames
类型:整数,默认值:-1,在Xdebug中引入> = 2.3
控制堆栈跟踪中显示的堆栈帧数,在PHP错误堆栈跟踪期间在命令行上以及在HTML跟踪的浏览器中显示。
xdebug.overload_var_dump
类型:布尔值,默认值:2,在Xdebug> 2.1中引入
默认情况下,当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
。
xdebug.profiler_aggregate
类型:整数,默认值:0
当此设置设置为1时,将为多个请求写入一个探查器文件。可以浏览多个页面或重新加载页面以获得所有请求的平均值。该文件将被命名 .cachegrind.aggregate
。您需要移动此文件以获取另一轮聚合数据。
xdebug.profiler_append
类型:整数,默认值:0
当此设置设置为1时,如果新请求映射到同一文件,则不会覆盖探查器文件(取决于xdebug.profiler_output_name设置。而是将文件附加到新配置文件中。
xdebug.profiler_enable
类型:整数,默认值:0
启用Xdebug的分析器,该分析器在配置文件输出目录中创建文件 。KCacheGrind可以读取这些文件以可视化您的数据。无法使用ini_set()在脚本中设置此设置。如果要有选择地启用探查器,请将xdebug.profiler_enable_trigger设置为1 而不是使用此设置。
xdebug.profiler_enable_trigger
类型:整数,默认值:0
当此设置设置为1时,您可以使用XDEBUG_PROFILE GET / POST参数触发生成探查器文件,或者设置名为XDEBUG_PROFILE的cookie。然后,这将将探查器数据写入 定义的目录。为了防止探查器为每个请求生成配置文件,您需要将xdebug.profiler_enable设置 为0.可以通过xdebug.profiler_enable_trigger_value配置对触发器本身的访问。
xdebug.profiler_enable_trigger_value
类型:字符串,默认值:“”,在Xdebug中引入> = 2.3
此设置可用于限制谁可以使用xdebug.profiler_enable_trigger中概述的XDEBUG_PROFILE功能。当从其空字符串的默认值更改时,cookie,GET或POST参数的值需要与此设置的共享密钥集匹配,以便启动探查器。
xdebug.profiler_output_dir
键入:字符串,默认值:/ tmp
将编译探测器输出的目录,确保将运行PHP的用户具有对该目录的写入权限。无法使用ini_set()在脚本中设置此设置。
xdebug.profiler_output_name
键入:字符串,默认值:cachegrind.out。%p
此设置确定用于将跟踪转储到的文件的名称。该设置指定格式说明符的格式,与sprintf()和strftime()非常相似。有几种格式说明符可用于格式化文件名。
有关支持的说明符,请参阅xdebug.trace_output_name文档。
xdebug.remote_addr_header
类型:字符串,默认值:“”,在Xdebug中引入> = 2.4
如果xdebug.remote_addr_header配置为非空字符串,则该值将用作$ SERVER超全局数组中的键,以确定用于查找用于“连接回”的IP地址或主机名的标头。此设置仅与xdebug.remote_connect_back结合使用 ,否则将被忽略。
xdebug.remote_autostart
类型:布尔值,默认值:0
通常,您需要使用特定的HTTP GET / POST变量来启动远程调试(请参阅远程调试)。当此设置设置为1时,即使GET / POST / COOKIE变量不存在,Xdebug也将始终尝试启动远程调试会话并尝试连接到客户端。
xdebug.remote_connect_back
类型:布尔值,默认值:0,在Xdebug> = 2.1中引入
如果启用,则忽略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不匹配 。
xdebug.remote_cookie_expire_time
类型:整数,默认值:3600,在Xdebug> = 2.1中引入
此设置可用于通过会话cookie增加(或减少)远程调试会话保持活动的时间。
xdebug.remote_enable
类型:布尔值,默认值:0
此开关控制Xdebug是否应尝试联系正在侦听主机和端口的调试客户端,并使用设置xdebug.remote_host和 xdebug.remote_port进行设置 。如果无法建立连接,脚本将继续,就像此设置为0一样。
xdebug.remote_handler
键入:字符串,默认值:dbgp
可以是'php3',它选择旧的PHP 3样式调试器 输出,'gdb',它启用GDB,如调试器接口或'dbgp' - 调试器协议。DBGp协议是唯一受支持的协议。
注意:Xdebug 2.1及更高版本仅支持'dbgp'作为协议。
xdebug.remote_host
键入:字符串,默认值:localhost
选择运行调试客户端的主机,您可以使用主机名,IP地址或Unix域套接字的“unix:/// path / to / sock”。如果启用了xdebug.remote_connect_back,则忽略此设置。
Xdebug 2.6中引入了对Unix域套接字的支持。
xdebug.remote_log
类型:字符串,默认值:
如果设置为值,则将其用作记录所有远程调试器通信的文件的文件名。该文件始终以append-mode打开,因此默认情况下不会被覆盖。没有可用的并发保护。该文件的格式如下所示:
xdebug.remote_mode
键入:字符串,默认值:req
选择启动调试连接的时间。此设置可以有两个不同的值:
REQ
一旦脚本启动,Xdebug将尝试连接到调试客户端。
JIT
一旦出现错误情况,Xdebug将仅尝试连接到调试客户端。
xdebug.remote_port
类型:整数,默认值:9000
Xdebug尝试在远程主机上连接的端口。端口9000是客户端和捆绑的调试客户端的默认端口。由于许多客户端使用此端口号,因此最好不要更改此设置。
xdebug.remote_timeout
类型:整数,默认值:200,在Xdebug中引入> = 2.6
Xdebug在IDE上等待确认传入调试连接的时间量(以毫秒为单位)。在大多数情况下,默认值200 ms应该足够了。如果您经常遇到调试请求丢失,可能是因为您有一个高延迟网络,或远离IDE的开发盒,或者防火墙速度慢,那么您可以增加此值。
请注意,增加此值可能意味着在Xdebug尝试建立连接但您的IDE未侦听时,您的请求似乎“挂起”。
xdebug.scream
类型:布尔值,默认值:0,在Xdebug> = 2.1中引入
如果此设置为1,则Xdebug将禁用@(关闭)运算符,以便不再隐藏通知,警告和错误。
xdebug.show_error_trace
类型:整数,默认值:0,在Xdebug> = 2.4中引入
当此设置设置为1时,只要出现错误,Xdebug就会显示堆栈跟踪 - 即使实际捕获到此错误。
xdebug.show_exception_trace
类型:整数,默认值:0
当此设置设置为1时,Xdebug将在引发异常或错误时显示堆栈跟踪 - 即使实际捕获到此异常或错误。
PHP 7中引入了错误“异常”。
xdebug.show_local_vars
类型:整数,默认值:0
当此设置设置为某个值时!= 0 Xdebug在错误情况下生成的堆栈转储也将显示最顶层范围内的所有变量。请注意,这可能会生成大量信息,因此默认情况下处于关闭状态。
xdebug.show_mem_delta
类型:整数,默认值:0
当此设置设置为某个值时!= 0 Xdebug的人类可读生成的跟踪文件将显示函数调用之间的内存使用量差异。如果Xdebug配置为生成计算机可读的跟踪文件,那么它们将始终显示此信息。
xdebug.trace_enable_trigger
类型:布尔值,默认值:0,在Xdebug> = 2.2中引入
当此设置设置为1时,您可以使用XDEBUG_TRACE GET / POST参数触发跟踪文件的生成,或者设置名为XDEBUG_TRACE的cookie。然后,这将跟踪数据写入 定义的目录。为了防止Xdebug为每个请求生成跟踪文件,您需要将xdebug.auto_trace设置 为0.可以通过xdebug.trace_enable_trigger_value配置对触发器本身的访问 。
xdebug.trace_enable_trigger_value
类型:字符串,默认值:“”,在Xdebug中引入> = 2.3
这个设置可以用来限制谁可以使用的XDEBUG_TRACE功能中概述xdebug.trace_enable_trigger。当从其空字符串的默认值更改时,cookie,GET或POST参数的值需要与此设置的共享密钥集匹配,以便生成跟踪文件。
xdebug.trace_format
类型:整数,默认值:0
跟踪文件的格式。
值 | 描述 |
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' | 空 | 回报价值 | 空 |
有关示例,请参阅功能跟踪的介绍。
xdebug.trace_options
类型:整数,默认值:0
设置为“1”时,将追加跟踪文件,而不是在后续请求中覆盖。
xdebug.trace_output_dir
键入:字符串,默认值:/ tmp
将写入跟踪文件的目录,确保将运行PHP的用户具有对该目录的写入权限。
xdebug.trace_output_name
类型:字符串,默认值:trace。%c
此设置确定用于将跟踪转储到的文件的名称。该设置指定格式说明符的格式,与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_display_max_children
类型:整数,默认值:128
当使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时,控制数组子项的数量和对象的属性。
要禁用任何限制,请使用-1作为值。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
xdebug.var_display_max_data
类型:整数,默认值:512
控制使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时显示的最大字符串长度。
要禁用任何限制,请使用-1作为值。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
xdebug.var_display_max_depth
类型:整数,默认值:3
控制使用xdebug_var_dump(), xdebug.show_local_vars或通过函数跟踪显示变量时,有多少嵌套级别的数组元素和对象属性。
您可以选择的最大值是1023.您还可以使用-1作为值来选择此最大数字。
此设置对通过“ 远程调试”功能发送给客户端的子节点数没有任何影响。
配置举例
php.ini中:
配置完成之后重启 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