什么是“<Cycle 1>”在Xdebug中的一个指示?

我有一个用kcachegrindparsing的php脚本的xdebugconfiguration文件。 下面是一个屏幕截图,显示了在给定函数中花费的大部分时间花在了<cycle 1> ,而最上面的“Callers”是由index.php中的'include'和'include_once'创build的。

显示周期1的xdebug配置文件的kcachegrind

这个configuration文件是在使用apache“ab”的压力testing期间运行的,因此发生了许多并发连接。

<cycle 1>在xdebugconfiguration文件中指明了什么?

这是启发式循环检测。 您可以从工具栏或从“查看 – >检测周期”或“查看 – >执行周期检测”菜单中将其closures。

循环就像recursion一样,直接的( f() -> f() -> f()其中->表示调用)和间接的( f()->g()->f()->g()->f()

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

尽pipe@osgx提到你可以closures循环检测,但是我只想在这里指出,如果你觉得<cycle 1>隐藏了你感兴趣的东西,你可能应该closures循环检测,正如他解释的那样。

在我的情况下,禁用循环检测实际上揭示了以前缺失的一些关键信息。