什么是“<cycle 1 =”“>”Xdebug中的指示?</cycle>

时间:2011-09-15 18:16:26

标签: profiling xdebug kcachegrind

我在php脚本上有一个xdebug配置文件,我用kcachegrind解析。这是一个屏幕截图,显示在任何给定函数中花费的最多时间都花在<cycle 1>中,而顶部'调用者'是由index.php中的'include'和'include_once'构成的。

kcachegrind of xdebug profile showing cycle 1

此配置文件是在使用apache'ab'进行压力测试期间运行的,因此发生了许多并发连接。

<cycle 1>在xdebug个人资料中的含义是什么?

2 个答案:

答案 0 :(得分:35)

这是启发式循环检测。您可以从工具栏或菜单“View-&gt; Detect cycles”或“View-&gt; Do cycle detection”中将其关闭。

循环就像递归一样,直接(f() -> f() -> f()->表示调用)和间接(f()->g()->f()->g()->f()

Callgring格式(在kcachegrind中使用)不保存完整的调用堆栈,它只存储调用者被调用者对,并且可能很难从此信息中恢复更长的周期

答案 1 :(得分:25)

虽然@osgx提到您可以关闭循环检测,但我只想在此指出,如果您认为<cycle 1>隐藏了您感兴趣的内容,那么您可能应该关闭循环检测,正如他解释的那样。

在我的案例中禁用循环检测实际上揭示了之前遗漏的一些关键信息。