有没有办法增加xdebug配置文件调用树的深度?

时间:2014-09-21 16:46:18

标签: php xdebug

我尝试使用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

2 个答案:

答案 0 :(得分:2)

考虑设置

xdebug.var_display_max_depth

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

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

答案 1 :(得分:2)

修改

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

  
    

嗨大家好,

         

分析中调用堆栈的深度是否有限制     xdebug的特点?

  
     

不,没有。

     
    

使用PHP Storm作为前端,我可以看到my_file.php占用率超过90%     当时,但是图表在调用树中不够深入     看看哪些功能占用了时间。

  
     

我知道如果kcachegrind占用的比例不足,那就不会显示出来   默认为5%。也许phpstorm也这样做了?

     
    

我能够看到哪些功能占用了最多的时间     执行统计选项卡,但是看看代码如何会很高兴     正在到达流氓函数电话。

  
     

很难看到我,没有配置文件,而指针就是什么   你会期待......

原始答案

这是一个有趣的问题,好奇可能会施加限制。原因是PHP的内置debug_backtrace默认打印整个堆栈跟踪。 $limit参数仅在5.4 ...

中添加

同样浏览 xdebug源我没有看到任何限制调用堆栈集合的值或代码。这就是说我没有看到任何配置选项影响探查器捕获的函数调用次数......

所以简短的回答是没有

虽然有些想法和建议

  1. 使用执行统计选项卡查找流氓功能。从该功能调用die(print_debug_backtrace())。这应该会给你一个堆栈跟踪到所说的流氓函数。
  2. 再次使用执行统计选项卡查找流氓函数,使用xdebug的function trace feature从那里获取它(比我知道的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 上发帖,或者自己询问作者。他们建议首先询问你所做的事情,所以列表和作者可能会接受调查。有关xdebug support page
  6. 的详细信息