我尝试使用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
答案 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源我没有看到任何限制调用堆栈集合的值或代码。这就是说我没有看到任何配置选项影响探查器捕获的函数调用次数......
所以简短的回答是没有。
虽然有些想法和建议
die(print_debug_backtrace())
。这应该会给你一个堆栈跟踪到所说的流氓函数。xdebug.profiler_output_dir
。如果有多个输出文件,请确保在cachegrind UI中检查所有这些文件。沿着这些方向考虑添加一个随机值xdebug.profiler_output_name = "callgrind.out.%t-%s-%r"
只是为了排除相互覆盖的文件(这种情况发生在我身上,一旦你意识到问题就可能非常令人沮丧)。