Что такое "указание в Xdebug? - PullRequest
       50

Что такое "указание в Xdebug?

48 голосов
/ 15 сентября 2011

У меня есть профиль xdebug в php-скрипте, который я проанализировал с помощью kcachegrind. Вот снимок экрана, показывающий, что наибольшее время, потраченное внутри любой данной функции, было потрачено внутри <cycle 1>, а верхние «Вызывающие стороны» были сделаны из «include» и «include_once» в index.php.

kcachegrind of xdebug profile showing cycle 1

Этот профиль был запущен во время стресс-теста с использованием apache 'ab', поэтому было много одновременных подключений.

Что означает <cycle 1> в профиле xdebug?

Ответы [ 2 ]

36 голосов
/ 20 сентября 2011

Это эвристический цикл обнаружения.Вы можете отключить его с панели инструментов или из меню «Вид-> Обнаружение циклов» или «Вид-> Обнаружение циклов».

Цикл - это что-то вроде рекурсии, как прямое (f() -> f() -> f() где -> означает вызов), так и косвенное (f()->g()->f()->g()->f())

Формат вызова (используется в kcachegrind) не сохраняет полный вызовв стеке хранятся только пары вызывающий-вызываемый, и из этой информации может быть трудно восстановить более длинные циклы

25 голосов
/ 07 августа 2013

Хотя @osgx упоминает, что вы можете отключить обнаружение циклов, я просто хотел отметить, что если вы чувствуете, что <cycle 1> скрывает что-то интересное для вас, то вы, вероятно, следует отключить обнаружение цикла, как он объясняет.

Отключение обнаружения цикла в моем случае фактически выявило некоторые ключевые данные, которых раньше не было.

...