我在php脚本上有一个xdebug配置文件,我用kcachegrind解析。这是一个屏幕截图,显示在任何给定函数中花费的最多时间都花在<cycle 1>
中,而顶部'调用者'是由index.php中的'include'和'include_once'构成的。
此配置文件是在使用apache'ab'进行压力测试期间运行的,因此发生了许多并发连接。
<cycle 1>
在xdebug个人资料中的含义是什么?
答案 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>
隐藏了您感兴趣的内容,那么您可能应该关闭循环检测,正如他解释的那样。
在我的案例中禁用循环检测实际上揭示了之前遗漏的一些关键信息。