54

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

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

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

<cycle 1>xdebug 配置文件上的指示是什么?

4

2 回答 2

41

它是启发式循环检测。您可以从工具栏或菜单“查看->检测循环”或“查看->执行循环检测”将其关闭。

循环类似于递归,直接(f() -> f() -> f()其中->表示调用)和间接(f()->g()->f()->g()->f()

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

于 2011-09-20T16:59:33.933 回答
28

尽管@osgx 提到您可以关闭循环检测,但我只想在这里指出,如果您觉得这<cycle 1>隐藏了您感兴趣的内容,您可能应该按照他的解释关闭循环检测。

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

于 2013-08-07T16:34:53.310 回答