有没有办法增加xdebug概要文件调用树的深度


Is there a way to increase xdebug profile call tree depth?

我正在尝试使用xdebug来确定是什么导致页面加载缓慢,而探查器快照在调用树选项卡中没有显示足够的深度(我使用的是PhpStorm)。

调用树选项卡如下所示:

index.php
  ..
  ..
  my_file.php
    function1
    function2
    ...

它显示my_file.php占用了90%以上的时间,但它在调用树中的深度不够,我无法查看哪些函数占用了时间。我主要可以从执行统计选项卡中了解到这一点,该选项卡显示了每个单独的函数,但如果调用树选项卡更深入,那就太好了。

有允许这样做的设置吗?

以下是我的xdebug设置:

[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = "callgrind.out.%t-%s"
xdebug.profiler_output_dir = "E:'wamp'www'xdebug_profiler"
xdebug.max_nesting_level = 500
xdebug.var_display_max_depth = 100
xdebug.var_display_max_data = 1024

编辑

我刚刚收到xdebug的作者Derick Rethans的规范答案,看起来我的答案确实是正确的!来自xdebug通用邮件列表上的信件:

大家好,

评测中调用堆栈的深度是否有限制xdebug的特性?

不,没有。

使用PHP Storm作为前端,我可以看到my_file.PHP占据了90%以上的份额但是图在调用树中的深度不够看看哪些功能占用了时间。

我知道kcachegrind如果占比小于默认为5%。也许phpstorm也这么做了?

我可以看到哪些功能在executionstatistics选项卡,但是如果能看到代码正在到达rogue函数调用。

对我来说很难看到,没有配置文件和指针你会期望。。。

原始答案

这是一个有趣的问题,也很奇怪限制可能被强加在哪里。原因是PHP内置的debug_backtrace默认打印整个堆栈跟踪。$limit参数仅在5.4…中添加

此外,略读xdebug源代码时,我没有看到任何会限制调用堆栈集合的值或代码。也就是说,我没有看到任何配置选项会影响探查器捕获的函数调用数量。。。

因此,简短的答案是

关于的几点思考与建议

  1. 使用执行统计选项卡查找流氓函数。从该函数调用die(print_debug_backtrace())。这应该会给你一个堆栈跟踪到所说的流氓函数
  2. 再次使用执行统计选项卡来查找rogue函数,使用xdebug的函数跟踪功能从那里获取它(我知道这比cachegrind UI更不可取,但取而代之的是…)
  3. 在收集配置文件时加载页面之前,请清除xdebug.profiler_output_dir。如果有多个输出文件,请确保在cachegrind UI中检查所有输出文件。按照这些思路,考虑添加一个随机值xdebug.profiler_output_name = "callgrind.out.%t-%s-%r",以排除文件相互覆盖的可能性(这种情况发生在我身上,一旦你意识到这是个问题,可能会让非常沮丧)
  4. 尝试另一个cachegrind可视化工具。虽然我怀疑这是个问题,但谁知道呢,作为最后的手段,我认为这值得一试
  5. 最后,对于规范的答案,您可以在xdebug邮件列表上发帖ecartis@lists.xdebug.org,或询问作者本人。他们建议先询问SO,你已经这样做了,所以列表和作者可能会接受询问。xdebug支持页面上的详细信息

考虑设置

xdebug.var_display_max_depth

到更高的值(默认值为3)。

此处列出了可能设置的其他变量:http://xdebug.org/docs/all_settings#var_display_max_depth