Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is "<Cycle 1>" an indication of in Xdebug?

I have an xdebug profile on a php script that I parsed with kcachegrind. Here is a screenshot showing that the most time spent inside any given function was spent inside <cycle 1> and the top 'Callers' were made from 'include' and 'include_once' in index.php.

kcachegrind of xdebug profile showing cycle 1

This profile was run during a stress-test using apache 'ab' so there were many concurrent connections occurring.

What does <cycle 1> indicate on an xdebug profile?

like image 906
Derek Downey Avatar asked Sep 15 '11 18:09

Derek Downey


2 Answers

It is heuristic cycle detection. You can turn it off from toolbar or from menu "View->Detect cycles" or "View->Do cycle detection".

Cycle is something like recursion, both direct ( f() -> f() -> f() where -> means call ) and indirect ( f()->g()->f()->g()->f())

Callgring format (used in kcachegrind) is not saving full call stack, it stores only pairs caller-callee and it may be hard to restore longer cycles from this information

like image 168
osgx Avatar answered Oct 31 '22 12:10

osgx


Although @osgx mentions that you can turn off Cycle Detection, I just wanted to point out here that if you feel that <cycle 1> is hiding something of interest to you, that you probably should turn off cycle detection as he explains.

Disabling cycle detection in my case actually revealed some key pieces of information that were missing before.

like image 44
Cory Klein Avatar answered Oct 31 '22 12:10

Cory Klein